Home | Info | Community | Development | myReactOS | Contact Us
Definition at line 253 of file iocomp.c.
Referenced by CreateIoCompletionPort(), RtlpInitializeThreadPool(), and SockCreateOrReferenceAsyncThread().
{ PKQUEUE Queue; HANDLE hIoCompletionHandle; KPROCESSOR_MODE PreviousMode = ExGetPreviousMode(); NTSTATUS Status; PAGED_CODE(); /* Check if this was a user-mode call */ if (PreviousMode != KernelMode) { /* Wrap probing in SEH */ _SEH2_TRY { /* Probe the handle */ ProbeForWriteHandle(IoCompletionHandle); } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { /* Return the exception code */ _SEH2_YIELD(return _SEH2_GetExceptionCode()); } _SEH2_END; } /* Create the Object */ Status = ObCreateObject(PreviousMode, IoCompletionType, ObjectAttributes, PreviousMode, NULL, sizeof(KQUEUE), 0, 0, (PVOID*)&Queue); if (NT_SUCCESS(Status)) { /* Initialize the Queue */ KeInitializeQueue(Queue, NumberOfConcurrentThreads); /* Insert it */ Status = ObInsertObject(Queue, NULL, DesiredAccess, 0, NULL, &hIoCompletionHandle); if (NT_SUCCESS(Status)) { /* Protect writing the handle in SEH */ _SEH2_TRY { /* Write the handle back */ *IoCompletionHandle = hIoCompletionHandle; } _SEH2_EXCEPT(ExSystemExceptionFilter()) { /* Get the exception code */ Status = _SEH2_GetExceptionCode(); } _SEH2_END; } } /* Return Status */ return Status; }