- Fix some small formatting issues. Modified: trunk/reactos/ntoskrnl/ex/event.c Modified: trunk/reactos/ntoskrnl/ex/mutant.c Modified: trunk/reactos/ntoskrnl/ex/sem.c _____
Modified: trunk/reactos/ntoskrnl/ex/event.c --- trunk/reactos/ntoskrnl/ex/event.c 2005-12-29 18:45:16 UTC (rev 20431) +++ trunk/reactos/ntoskrnl/ex/event.c 2005-12-29 18:47:14 UTC (rev 20432) @@ -153,11 +153,13 @@
&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 @@ 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, _____
Modified: trunk/reactos/ntoskrnl/ex/mutant.c --- trunk/reactos/ntoskrnl/ex/mutant.c 2005-12-29 18:45:16 UTC (rev 20431) +++ trunk/reactos/ntoskrnl/ex/mutant.c 2005-12-29 18:47:14 UTC (rev 20432) @@ -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}; + MUTANT_ALL_ACCESS +};
-static const INFORMATION_CLASS_INFO ExMutantInfoClass[] = { - +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 @@
VOID INIT_FUNCTION -STDCALL +NTAPI ExpInitializeMutantImplementation(VOID) { OBJECT_TYPE_INITIALIZER ObjectTypeInitializer; UNICODE_STRING Name; + DPRINT("Creating Mutant Object Type\n");
- DPRINT("Creating Mutant Object Type\n"); - /* Create the Event Pair Object Type */ RtlZeroMemory(&ObjectTypeInitializer, sizeof(ObjectTypeInitializer)); RtlInitUnicodeString(&Name, L"Mutant"); @@ -79,7 +75,7 @@ * @implemented */ NTSTATUS -STDCALL +NTAPI NtCreateMutant(OUT PHANDLE MutantHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, @@ -89,22 +85,26 @@ HANDLE hMutant; PKMUTANT Mutant; NTSTATUS Status = STATUS_SUCCESS; - PAGED_CODE(); - DPRINT("NtCreateMutant(0x%p, 0x%x, 0x%p)\n", MutantHandle, DesiredAccess, ObjectAttributes); + DPRINT("NtCreateMutant(0x%p, 0x%x, 0x%p)\n", + MutantHandle, DesiredAccess, ObjectAttributes);
- /* Check Output Safety */ - if(PreviousMode != KernelMode) { - - _SEH_TRY { - + /* 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 @@ (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 @@ &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 @@ * @implemented */ NTSTATUS -STDCALL +NTAPI NtOpenMutant(OUT PHANDLE MutantHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes) @@ -166,22 +168,26 @@ HANDLE hMutant; KPROCESSOR_MODE PreviousMode = ExGetPreviousMode(); NTSTATUS Status = STATUS_SUCCESS; - PAGED_CODE(); - DPRINT("NtOpenMutant(0x%p, 0x%x, 0x%p)\n", MutantHandle, DesiredAccess, ObjectAttributes); + DPRINT("NtOpenMutant(0x%p, 0x%x, 0x%p)\n", + MutantHandle, DesiredAccess, ObjectAttributes);
- /* Check Output Safety */ - if(PreviousMode != KernelMode) { - - _SEH_TRY { - + /* 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 @@ 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 @@ * @implemented */ NTSTATUS -STDCALL +NTAPI NtQueryMutant(IN HANDLE MutantHandle, IN MUTANT_INFORMATION_CLASS MutantInformationClass, OUT PVOID MutantInformation, @@ -226,20 +234,21 @@ 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,25 +261,27 @@ (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 @@ 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 @@ NULL);
/* Check for Success and release if such */ - if(NT_SUCCESS(Status)) { + 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);
- /* 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) { - + /* 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); }
_____
Modified: trunk/reactos/ntoskrnl/ex/sem.c --- trunk/reactos/ntoskrnl/ex/sem.c 2005-12-29 18:45:16 UTC (rev 20431) +++ trunk/reactos/ntoskrnl/ex/sem.c 2005-12-29 18:47:14 UTC (rev 20432) @@ -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 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");
- DPRINT("Creating Semaphore Object Type\n"); - /* Create the Event Pair Object Type */ RtlZeroMemory(&ObjectTypeInitializer, sizeof(ObjectTypeInitializer)); RtlInitUnicodeString(&Name, L"Semaphore"); @@ -62,10 +62,10 @@ * @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 @@ 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 @@ } _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 @@ &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 @@ * @implemented */ NTSTATUS -STDCALL +NTAPI NtOpenSemaphore(OUT PHANDLE SemaphoreHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes) @@ -159,11 +166,13 @@ 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 @@ } _SEH_END;
+ /* Bail out if pointer was invalid */ if(!NT_SUCCESS(Status)) return Status; }
@@ -184,17 +194,20 @@ 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 @@ * @implemented */ NTSTATUS -STDCALL +NTAPI NtQuerySemaphore(IN HANDLE SemaphoreHandle, IN SEMAPHORE_INFORMATION_CLASS SemaphoreInformationClass, OUT PVOID SemaphoreInformation, @@ -215,13 +228,13 @@ 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 @@ /* 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 @@ * @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 @@ } _SEH_END;
+ /* Bail out if pointer was invalid */ if(!NT_SUCCESS(Status)) return Status; }
@@ -318,9 +335,10 @@ /* 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 @@ ObDereferenceObject(Semaphore);
/* Return the old count if requested */ - if(PreviousCount) - { - *PreviousCount = PrevCount; - } + if(PreviousCount) *PreviousCount = PrevCount; } _SEH_EXCEPT(_SEH_ExSystemExceptionFilter) {