From 0b7ed59da0c991c32f6d635f437ec6f877fd7687 Mon Sep 17 00:00:00 2001 From: Alex Ionescu Date: Thu, 29 Dec 2005 18:47:14 +0000 Subject: [PATCH] - Fix some small formatting issues. svn path=/trunk/; revision=20432 --- reactos/ntoskrnl/ex/event.c | 10 +- reactos/ntoskrnl/ex/mutant.c | 241 +++++++++++++++++++---------------- reactos/ntoskrnl/ex/sem.c | 87 +++++++------ 3 files changed, 186 insertions(+), 152 deletions(-) diff --git a/reactos/ntoskrnl/ex/event.c b/reactos/ntoskrnl/ex/event.c index 6c0f9d05c10..143df16e01c 100644 --- a/reactos/ntoskrnl/ex/event.c +++ b/reactos/ntoskrnl/ex/event.c @@ -153,11 +153,13 @@ NtCreateEvent(OUT PHANDLE EventHandle, &hEvent); ObDereferenceObject(Event); - /* Check for success and return handle */ + /* Check for success */ if(NT_SUCCESS(Status)) { + /* Enter SEH for return */ _SEH_TRY { + /* Return the handle to the caller */ *EventHandle = hEvent; } _SEH_EXCEPT(_SEH_ExSystemExceptionFilter) @@ -320,14 +322,16 @@ NtQueryEvent(IN HANDLE EventHandle, PKEVENT Event; KPROCESSOR_MODE PreviousMode = ExGetPreviousMode(); NTSTATUS Status = STATUS_SUCCESS; - PEVENT_BASIC_INFORMATION BasicInfo = (PEVENT_BASIC_INFORMATION)EventInformation; + PEVENT_BASIC_INFORMATION BasicInfo = + (PEVENT_BASIC_INFORMATION)EventInformation; PAGED_CODE(); DPRINT("NtQueryEvent(0x%p, 0x%x)\n", EventHandle, EventInformationClass); /* Check buffers and class validity */ Status = DefaultQueryInfoBufferCheck(EventInformationClass, ExEventInfoClass, - sizeof(ExEventInfoClass) / sizeof(ExEventInfoClass[0]), + sizeof(ExEventInfoClass) / + sizeof(ExEventInfoClass[0]), EventInformation, EventInformationLength, ReturnLength, diff --git a/reactos/ntoskrnl/ex/mutant.c b/reactos/ntoskrnl/ex/mutant.c index 32f77e964ef..a74e7626dec 100644 --- a/reactos/ntoskrnl/ex/mutant.c +++ b/reactos/ntoskrnl/ex/mutant.c @@ -1,12 +1,10 @@ /* * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS kernel + * PROJECT: ReactOS Kernel * FILE: ntoskrnl/ex/mutant.c * PURPOSE: Executive Management of Mutants - * - * PROGRAMMERS: Alex Ionescu - Fix tab/space mismatching, tiny fixes to query function and - * add more debug output. - * David Welch (welch@cwcom.net) + * PROGRAMMERS: Alex Ionescu (alex@relsoft.net) + * Thomas Weidenmueller */ /* INCLUDES *****************************************************************/ @@ -19,31 +17,30 @@ #pragma alloc_text(INIT, ExpInitializeMutantImplementation) #endif -#ifndef MUTANT_INCREMENT -#define MUTANT_INCREMENT 1 -#endif +/* DATA **********************************************************************/ POBJECT_TYPE ExMutantObjectType = NULL; -static GENERIC_MAPPING ExpMutantMapping = { +GENERIC_MAPPING ExpMutantMapping = +{ STANDARD_RIGHTS_READ | SYNCHRONIZE | MUTANT_QUERY_STATE, STANDARD_RIGHTS_WRITE | SYNCHRONIZE, STANDARD_RIGHTS_EXECUTE | SYNCHRONIZE | MUTANT_QUERY_STATE, - MUTANT_ALL_ACCESS}; - -static const INFORMATION_CLASS_INFO ExMutantInfoClass[] = { + MUTANT_ALL_ACCESS +}; +static const INFORMATION_CLASS_INFO ExMutantInfoClass[] = +{ /* MutantBasicInformation */ - ICI_SQ_SAME( sizeof(MUTANT_BASIC_INFORMATION), sizeof(ULONG), ICIF_QUERY ), + ICI_SQ_SAME( sizeof(MUTANT_BASIC_INFORMATION), sizeof(ULONG), ICIF_QUERY), }; /* FUNCTIONS *****************************************************************/ VOID -STDCALL +NTAPI ExpDeleteMutant(PVOID ObjectBody) { - DPRINT("ExpDeleteMutant(ObjectBody 0x%p)\n", ObjectBody); /* Make sure to release the Mutant */ @@ -55,14 +52,13 @@ ExpDeleteMutant(PVOID ObjectBody) VOID INIT_FUNCTION -STDCALL +NTAPI ExpInitializeMutantImplementation(VOID) { OBJECT_TYPE_INITIALIZER ObjectTypeInitializer; UNICODE_STRING Name; - DPRINT("Creating Mutant Object Type\n"); - + /* Create the Event Pair Object Type */ RtlZeroMemory(&ObjectTypeInitializer, sizeof(ObjectTypeInitializer)); RtlInitUnicodeString(&Name, L"Mutant"); @@ -79,7 +75,7 @@ ExpInitializeMutantImplementation(VOID) * @implemented */ NTSTATUS -STDCALL +NTAPI NtCreateMutant(OUT PHANDLE MutantHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, @@ -89,22 +85,26 @@ NtCreateMutant(OUT PHANDLE MutantHandle, HANDLE hMutant; PKMUTANT Mutant; NTSTATUS Status = STATUS_SUCCESS; - PAGED_CODE(); - DPRINT("NtCreateMutant(0x%p, 0x%x, 0x%p)\n", MutantHandle, DesiredAccess, ObjectAttributes); - - /* Check Output Safety */ - if(PreviousMode != KernelMode) { - - _SEH_TRY { + DPRINT("NtCreateMutant(0x%p, 0x%x, 0x%p)\n", + MutantHandle, DesiredAccess, ObjectAttributes); + /* Check if we were called from user-mode */ + if(PreviousMode != KernelMode) + { + /* Enter SEH Block */ + _SEH_TRY + { + /* Check handle pointer */ ProbeForWriteHandle(MutantHandle); - } _SEH_EXCEPT(_SEH_ExSystemExceptionFilter) { - + } + _SEH_EXCEPT(_SEH_ExSystemExceptionFilter) + { Status = _SEH_GetExceptionCode(); + } + _SEH_END; - } _SEH_END; - + /* Bail out if pointer was invalid */ if(!NT_SUCCESS(Status)) return Status; } @@ -120,8 +120,8 @@ NtCreateMutant(OUT PHANDLE MutantHandle, (PVOID*)&Mutant); /* Check for success */ - if(NT_SUCCESS(Status)) { - + if(NT_SUCCESS(Status)) + { /* Initalize the Kernel Mutant */ DPRINT("Initializing the Mutant\n"); KeInitializeMutant(Mutant, InitialOwner); @@ -135,18 +135,20 @@ NtCreateMutant(OUT PHANDLE MutantHandle, &hMutant); ObDereferenceObject(Mutant); - /* Check for success and return handle */ - if(NT_SUCCESS(Status)) { - - _SEH_TRY { - + /* Check for success */ + if(NT_SUCCESS(Status)) + { + /* Enter SEH for return */ + _SEH_TRY + { + /* Return the handle to the caller */ *MutantHandle = hMutant; - - } _SEH_EXCEPT(_SEH_ExSystemExceptionFilter) { - + } + _SEH_EXCEPT(_SEH_ExSystemExceptionFilter) + { Status = _SEH_GetExceptionCode(); - - } _SEH_END; + } + _SEH_END; } } @@ -158,7 +160,7 @@ NtCreateMutant(OUT PHANDLE MutantHandle, * @implemented */ NTSTATUS -STDCALL +NTAPI NtOpenMutant(OUT PHANDLE MutantHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes) @@ -166,22 +168,26 @@ NtOpenMutant(OUT PHANDLE MutantHandle, HANDLE hMutant; KPROCESSOR_MODE PreviousMode = ExGetPreviousMode(); NTSTATUS Status = STATUS_SUCCESS; - PAGED_CODE(); - DPRINT("NtOpenMutant(0x%p, 0x%x, 0x%p)\n", MutantHandle, DesiredAccess, ObjectAttributes); - - /* Check Output Safety */ - if(PreviousMode != KernelMode) { - - _SEH_TRY { + DPRINT("NtOpenMutant(0x%p, 0x%x, 0x%p)\n", + MutantHandle, DesiredAccess, ObjectAttributes); + /* Check if we were called from user-mode */ + if(PreviousMode != KernelMode) + { + /* Enter SEH Block */ + _SEH_TRY + { + /* Check handle pointer */ ProbeForWriteHandle(MutantHandle); - } _SEH_EXCEPT(_SEH_ExSystemExceptionFilter) { - + } + _SEH_EXCEPT(_SEH_ExSystemExceptionFilter) + { Status = _SEH_GetExceptionCode(); + } + _SEH_END; - } _SEH_END; - + /* Bail out if pointer was invalid */ if(!NT_SUCCESS(Status)) return Status; } @@ -194,18 +200,20 @@ NtOpenMutant(OUT PHANDLE MutantHandle, NULL, &hMutant); - /* Check for success and return handle */ - if(NT_SUCCESS(Status)) { - - _SEH_TRY { - + /* Check for success */ + if(NT_SUCCESS(Status)) + { + /* Enter SEH for return */ + _SEH_TRY + { + /* Return the handle to the caller */ *MutantHandle = hMutant; - - } _SEH_EXCEPT(_SEH_ExSystemExceptionFilter) { - + } + _SEH_EXCEPT(_SEH_ExSystemExceptionFilter) + { Status = _SEH_GetExceptionCode(); - - } _SEH_END; + } + _SEH_END; } /* Return Status */ @@ -216,7 +224,7 @@ NtOpenMutant(OUT PHANDLE MutantHandle, * @implemented */ NTSTATUS -STDCALL +NTAPI NtQueryMutant(IN HANDLE MutantHandle, IN MUTANT_INFORMATION_CLASS MutantInformationClass, OUT PVOID MutantInformation, @@ -226,20 +234,21 @@ NtQueryMutant(IN HANDLE MutantHandle, PKMUTANT Mutant; KPROCESSOR_MODE PreviousMode = ExGetPreviousMode(); NTSTATUS Status = STATUS_SUCCESS; - PMUTANT_BASIC_INFORMATION BasicInfo = (PMUTANT_BASIC_INFORMATION)MutantInformation; - + PMUTANT_BASIC_INFORMATION BasicInfo = + (PMUTANT_BASIC_INFORMATION)MutantInformation; PAGED_CODE(); /* Check buffers and parameters */ Status = DefaultQueryInfoBufferCheck(MutantInformationClass, ExMutantInfoClass, - sizeof(ExMutantInfoClass) / sizeof(ExMutantInfoClass[0]), + sizeof(ExMutantInfoClass) / + sizeof(ExMutantInfoClass[0]), MutantInformation, MutantInformationLength, ResultLength, PreviousMode); - if(!NT_SUCCESS(Status)) { - + if(!NT_SUCCESS(Status)) + { DPRINT("NtQueryMutant() failed, Status: 0x%x\n", Status); return Status; } @@ -252,24 +261,26 @@ NtQueryMutant(IN HANDLE MutantHandle, (PVOID*)&Mutant, NULL); /* Check for Status */ - if(NT_SUCCESS(Status)) { - - _SEH_TRY { - + if(NT_SUCCESS(Status)) + { + /* Enter SEH Block for return */ + _SEH_TRY + { /* Fill out the Basic Information Requested */ DPRINT("Returning Mutant Information\n"); BasicInfo->CurrentCount = KeReadStateMutant(Mutant); - BasicInfo->OwnedByCaller = (Mutant->OwnerThread == KeGetCurrentThread()); + BasicInfo->OwnedByCaller = (Mutant->OwnerThread == + KeGetCurrentThread()); BasicInfo->AbandonedState = Mutant->Abandoned; /* Return the Result Length if requested */ if(ResultLength) *ResultLength = sizeof(MUTANT_BASIC_INFORMATION); - - } _SEH_EXCEPT(_SEH_ExSystemExceptionFilter) { - + } + _SEH_EXCEPT(_SEH_ExSystemExceptionFilter) + { Status = _SEH_GetExceptionCode(); - - } _SEH_END; + } + _SEH_END; /* Release the Object */ ObDereferenceObject(Mutant); @@ -279,39 +290,38 @@ NtQueryMutant(IN HANDLE MutantHandle, return Status; } - /* * @implemented */ NTSTATUS -STDCALL +NTAPI NtReleaseMutant(IN HANDLE MutantHandle, - IN PLONG PreviousCount OPTIONAL) + IN PLONG PreviousCount OPTIONAL) { PKMUTANT Mutant; - KPROCESSOR_MODE PreviousMode; + KPROCESSOR_MODE PreviousMode = ExGetPreviousMode(); NTSTATUS Status = STATUS_SUCCESS; - PAGED_CODE(); - - PreviousMode = ExGetPreviousMode(); - DPRINT("NtReleaseMutant(MutantHandle 0x%p PreviousCount 0x%p)\n", MutantHandle, PreviousCount); - /* Check Output Safety */ - if(PreviousMode != KernelMode && PreviousCount) { - - _SEH_TRY { - + /* Check if we were called from user-mode */ + if((PreviousCount) && (PreviousMode != KernelMode)) + { + /* Entry SEH Block */ + _SEH_TRY + { + /* Make sure the state pointer is valid */ ProbeForWriteLong(PreviousCount); - } _SEH_EXCEPT(_SEH_ExSystemExceptionFilter) { - + } + _SEH_EXCEPT(_SEH_ExSystemExceptionFilter) + { Status = _SEH_GetExceptionCode(); + } + _SEH_END; - } _SEH_END; - + /* Bail out if pointer was invalid */ if(!NT_SUCCESS(Status)) return Status; } @@ -324,25 +334,30 @@ NtReleaseMutant(IN HANDLE MutantHandle, NULL); /* Check for Success and release if such */ - if(NT_SUCCESS(Status)) { - - /* release the mutant. doing so might raise an exception which we're - required to catch! */ - _SEH_TRY { - - LONG Prev = KeReleaseMutant(Mutant, MUTANT_INCREMENT, FALSE, FALSE); - - if(PreviousCount) { - - *PreviousCount = Prev; - } - - } _SEH_EXCEPT(_SEH_ExSystemExceptionFilter) { + if(NT_SUCCESS(Status)) + { + /* + * Release the mutant. doing so might raise an exception which we're + * required to catch! + */ + _SEH_TRY + { + /* Release the mutant */ + LONG Prev = KeReleaseMutant(Mutant, + MUTANT_INCREMENT, + FALSE, + FALSE); + /* Return the previous count if requested */ + if(PreviousCount) *PreviousCount = Prev; + } + _SEH_EXCEPT(_SEH_ExSystemExceptionFilter) + { Status = _SEH_GetExceptionCode(); + } + _SEH_END; - } _SEH_END; - + /* Dereference it */ ObDereferenceObject(Mutant); } diff --git a/reactos/ntoskrnl/ex/sem.c b/reactos/ntoskrnl/ex/sem.c index 62a5523d086..11dcc29c488 100644 --- a/reactos/ntoskrnl/ex/sem.c +++ b/reactos/ntoskrnl/ex/sem.c @@ -1,11 +1,10 @@ /* * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS kernel + * PROJECT: ReactOS Kernel * FILE: ntoskrnl/ex/sem.c * PURPOSE: Semaphore Implementation - * * PROGRAMMERS: Alex Ionescu (alex@relsoft.net) - * David Welch (welch@mcmail.com) + * Thomas Weidenmueller */ /* INCLUDES *****************************************************************/ @@ -22,7 +21,7 @@ POBJECT_TYPE ExSemaphoreObjectType; -static GENERIC_MAPPING ExSemaphoreMapping = +GENERIC_MAPPING ExSemaphoreMapping = { STANDARD_RIGHTS_READ | SEMAPHORE_QUERY_STATE, STANDARD_RIGHTS_WRITE | SEMAPHORE_MODIFY_STATE, @@ -33,19 +32,20 @@ static GENERIC_MAPPING ExSemaphoreMapping = static const INFORMATION_CLASS_INFO ExSemaphoreInfoClass[] = { /* SemaphoreBasicInformation */ - ICI_SQ_SAME( sizeof(SEMAPHORE_BASIC_INFORMATION), sizeof(ULONG), ICIF_QUERY ), + ICI_SQ_SAME( sizeof(SEMAPHORE_BASIC_INFORMATION), sizeof(ULONG), ICIF_QUERY), }; +/* FUNCTIONS *****************************************************************/ + VOID INIT_FUNCTION -STDCALL +NTAPI ExpInitializeSemaphoreImplementation(VOID) { OBJECT_TYPE_INITIALIZER ObjectTypeInitializer; UNICODE_STRING Name; - DPRINT("Creating Semaphore Object Type\n"); - + /* Create the Event Pair Object Type */ RtlZeroMemory(&ObjectTypeInitializer, sizeof(ObjectTypeInitializer)); RtlInitUnicodeString(&Name, L"Semaphore"); @@ -62,10 +62,10 @@ ExpInitializeSemaphoreImplementation(VOID) * @implemented */ NTSTATUS -STDCALL +NTAPI NtCreateSemaphore(OUT PHANDLE SemaphoreHandle, IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, + IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN LONG InitialCount, IN LONG MaximumCount) { @@ -75,11 +75,13 @@ NtCreateSemaphore(OUT PHANDLE SemaphoreHandle, NTSTATUS Status = STATUS_SUCCESS; PAGED_CODE(); - /* Check Output Safety */ + /* Check if we were called from user-mode */ if(PreviousMode != KernelMode) { - _SEH_TRY + /* Enter SEH Block */ + _SEH_TRY { + /* Check handle pointer */ ProbeForWriteHandle(SemaphoreHandle); } _SEH_EXCEPT(_SEH_ExSystemExceptionFilter) @@ -88,11 +90,14 @@ NtCreateSemaphore(OUT PHANDLE SemaphoreHandle, } _SEH_END; + /* Bail out if pointer was invalid */ if(!NT_SUCCESS(Status)) return Status; } /* Make sure the counts make sense */ - if (MaximumCount <= 0 || InitialCount < 0 || InitialCount > MaximumCount) + if ((MaximumCount <= 0) || + (InitialCount < 0) || + (InitialCount > MaximumCount)) { DPRINT("Invalid Count Data!\n"); return STATUS_INVALID_PARAMETER; @@ -126,11 +131,13 @@ NtCreateSemaphore(OUT PHANDLE SemaphoreHandle, &hSemaphore); ObDereferenceObject(Semaphore); - /* Check for success and return handle */ + /* Check for success */ if(NT_SUCCESS(Status)) { + /* Enter SEH Block for return */ _SEH_TRY { + /* Return the handle */ *SemaphoreHandle = hSemaphore; } _SEH_EXCEPT(_SEH_ExSystemExceptionFilter) @@ -149,7 +156,7 @@ NtCreateSemaphore(OUT PHANDLE SemaphoreHandle, * @implemented */ NTSTATUS -STDCALL +NTAPI NtOpenSemaphore(OUT PHANDLE SemaphoreHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes) @@ -159,11 +166,13 @@ NtOpenSemaphore(OUT PHANDLE SemaphoreHandle, NTSTATUS Status = STATUS_SUCCESS; PAGED_CODE(); - /* Check Output Safety */ + /* Check if we were called from user-mode */ if(PreviousMode != KernelMode) { + /* Enter SEH Block */ _SEH_TRY { + /* Check handle pointer */ ProbeForWriteHandle(SemaphoreHandle); } _SEH_EXCEPT(_SEH_ExSystemExceptionFilter) @@ -172,6 +181,7 @@ NtOpenSemaphore(OUT PHANDLE SemaphoreHandle, } _SEH_END; + /* Bail out if pointer was invalid */ if(!NT_SUCCESS(Status)) return Status; } @@ -184,17 +194,20 @@ NtOpenSemaphore(OUT PHANDLE SemaphoreHandle, NULL, &hSemaphore); - /* Check for success and return handle */ + /* Check for success */ if(NT_SUCCESS(Status)) { + /* Enter SEH Block for return */ _SEH_TRY { + /* Return the handle */ *SemaphoreHandle = hSemaphore; } _SEH_EXCEPT(_SEH_ExSystemExceptionFilter) { Status = _SEH_GetExceptionCode(); - } _SEH_END; + } + _SEH_END; } /* Return Status */ @@ -205,7 +218,7 @@ NtOpenSemaphore(OUT PHANDLE SemaphoreHandle, * @implemented */ NTSTATUS -STDCALL +NTAPI NtQuerySemaphore(IN HANDLE SemaphoreHandle, IN SEMAPHORE_INFORMATION_CLASS SemaphoreInformationClass, OUT PVOID SemaphoreInformation, @@ -215,13 +228,13 @@ NtQuerySemaphore(IN HANDLE SemaphoreHandle, PKSEMAPHORE Semaphore; KPROCESSOR_MODE PreviousMode = ExGetPreviousMode(); NTSTATUS Status = STATUS_SUCCESS; - PAGED_CODE(); /* Check buffers and class validity */ Status = DefaultQueryInfoBufferCheck(SemaphoreInformationClass, ExSemaphoreInfoClass, - sizeof(ExSemaphoreInfoClass) / sizeof(ExSemaphoreInfoClass[0]), + sizeof(ExSemaphoreInfoClass) / + sizeof(ExSemaphoreInfoClass[0]), SemaphoreInformation, SemaphoreInformationLength, ReturnLength, @@ -244,22 +257,24 @@ NtQuerySemaphore(IN HANDLE SemaphoreHandle, /* Check for success */ if(NT_SUCCESS(Status)) { + /* Entry SEH Block */ _SEH_TRY { - PSEMAPHORE_BASIC_INFORMATION BasicInfo = (PSEMAPHORE_BASIC_INFORMATION)SemaphoreInformation; + PSEMAPHORE_BASIC_INFORMATION BasicInfo = + (PSEMAPHORE_BASIC_INFORMATION)SemaphoreInformation; /* Return the basic information */ BasicInfo->CurrentCount = KeReadStateSemaphore(Semaphore); BasicInfo->MaximumCount = Semaphore->Limit; - /* Return length */ - if(ReturnLength) *ReturnLength = sizeof(SEMAPHORE_BASIC_INFORMATION); - + /* Return the length */ + if(ReturnLength) *ReturnLength = sizeof(*BasicInfo); } _SEH_EXCEPT(_SEH_ExSystemExceptionFilter) { Status = _SEH_GetExceptionCode(); - } _SEH_END; + } + _SEH_END; /* Dereference the Object */ ObDereferenceObject(Semaphore); @@ -273,22 +288,23 @@ NtQuerySemaphore(IN HANDLE SemaphoreHandle, * @implemented */ NTSTATUS -STDCALL +NTAPI NtReleaseSemaphore(IN HANDLE SemaphoreHandle, IN LONG ReleaseCount, - OUT PLONG PreviousCount OPTIONAL) + OUT PLONG PreviousCount OPTIONAL) { KPROCESSOR_MODE PreviousMode = ExGetPreviousMode(); PKSEMAPHORE Semaphore; NTSTATUS Status = STATUS_SUCCESS; - PAGED_CODE(); - /* Check buffer validity */ - if(PreviousCount && PreviousMode != KernelMode) + /* Check if we were called from user-mode */ + if((PreviousCount) && (PreviousMode != KernelMode)) { + /* Entry SEH Block */ _SEH_TRY { + /* Make sure the state pointer is valid */ ProbeForWriteLong(PreviousCount); } _SEH_EXCEPT(_SEH_ExSystemExceptionFilter) @@ -297,6 +313,7 @@ NtReleaseSemaphore(IN HANDLE SemaphoreHandle, } _SEH_END; + /* Bail out if pointer was invalid */ if(!NT_SUCCESS(Status)) return Status; } @@ -318,9 +335,10 @@ NtReleaseSemaphore(IN HANDLE SemaphoreHandle, /* Check for success */ if (NT_SUCCESS(Status)) { - /* Release the semaphore */ + /* Enter SEH Block */ _SEH_TRY { + /* Release the semaphore */ LONG PrevCount = KeReleaseSemaphore(Semaphore, IO_NO_INCREMENT, ReleaseCount, @@ -328,10 +346,7 @@ NtReleaseSemaphore(IN HANDLE SemaphoreHandle, ObDereferenceObject(Semaphore); /* Return the old count if requested */ - if(PreviousCount) - { - *PreviousCount = PrevCount; - } + if(PreviousCount) *PreviousCount = PrevCount; } _SEH_EXCEPT(_SEH_ExSystemExceptionFilter) {