Home | Info | Community | Development | myReactOS | Contact Us
Definition at line 347 of file state.c.
{ PETHREAD Thread; ULONG Prev; KPROCESSOR_MODE PreviousMode = ExGetPreviousMode(); NTSTATUS Status; PAGED_CODE(); /* Check if caller gave a suspend count from user mode */ if ((PreviousSuspendCount) && (PreviousMode != KernelMode)) { /* Enter SEH for probing */ _SEH2_TRY { /* Probe the count */ ProbeForWriteUlong(PreviousSuspendCount); } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { /* Return the exception code */ _SEH2_YIELD(return _SEH2_GetExceptionCode()); } _SEH2_END; } /* Get the Thread Object */ Status = ObReferenceObjectByHandle(ThreadHandle, THREAD_SUSPEND_RESUME, PsThreadType, PreviousMode, (PVOID*)&Thread, NULL); if (!NT_SUCCESS(Status)) return Status; /* Call the internal function */ Status = PsSuspendThread(Thread, &Prev); ObDereferenceObject(Thread); if (!NT_SUCCESS(Status)) return Status; /* Protect write with SEH */ _SEH2_TRY { /* Return the Previous Count */ if (PreviousSuspendCount) *PreviousSuspendCount = Prev; } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { /* Get the exception code */ Status = _SEH2_GetExceptionCode(); } _SEH2_END; /* Return */ return Status; }