[NTOS:MM] Quick fix: use SIZE_T instead of ULONG, because ULONG is 32-bit and on...
[reactos.git] / ntoskrnl / ex / mutant.c
index 1337dbf..fb3dd1f 100644 (file)
@@ -23,9 +23,9 @@ POBJECT_TYPE ExMutantObjectType = NULL;
 
 GENERIC_MAPPING ExpMutantMapping =
 {
-    STANDARD_RIGHTS_READ    | SYNCHRONIZE | MUTANT_QUERY_STATE,
-    STANDARD_RIGHTS_WRITE   | SYNCHRONIZE,
-    STANDARD_RIGHTS_EXECUTE | SYNCHRONIZE | MUTANT_QUERY_STATE,
+    STANDARD_RIGHTS_READ | MUTANT_QUERY_STATE,
+    STANDARD_RIGHTS_WRITE,
+    STANDARD_RIGHTS_EXECUTE | SYNCHRONIZE,
     MUTANT_ALL_ACCESS
 };
 
@@ -50,13 +50,14 @@ ExpDeleteMutant(PVOID ObjectBody)
                     FALSE);
 }
 
-VOID
+BOOLEAN
 INIT_FUNCTION
 NTAPI
 ExpInitializeMutantImplementation(VOID)
 {
     OBJECT_TYPE_INITIALIZER ObjectTypeInitializer;
     UNICODE_STRING Name;
+    NTSTATUS Status;
     DPRINT("Creating Mutant Object Type\n");
 
     /* Create the Event Pair Object Type */
@@ -68,7 +69,10 @@ ExpInitializeMutantImplementation(VOID)
     ObjectTypeInitializer.PoolType = NonPagedPool;
     ObjectTypeInitializer.DeleteProcedure = ExpDeleteMutant;
     ObjectTypeInitializer.ValidAccessMask = MUTANT_ALL_ACCESS;
-    ObCreateObjectType(&Name, &ObjectTypeInitializer, NULL, &ExMutantObjectType);
+    ObjectTypeInitializer.InvalidAttributes = OBJ_OPENLINK;
+    Status = ObCreateObjectType(&Name, &ObjectTypeInitializer, NULL, &ExMutantObjectType);
+    if (!NT_SUCCESS(Status)) return FALSE;
+    return TRUE;
 }
 
 /*
@@ -120,7 +124,7 @@ NtCreateMutant(OUT PHANDLE MutantHandle,
     /* Check for success */
     if(NT_SUCCESS(Status))
     {
-        /* Initalize the Kernel Mutant */
+        /* Initialize the Kernel Mutant */
         DPRINT("Initializing the Mutant\n");
         KeInitializeMutant(Mutant, InitialOwner);
 
@@ -322,7 +326,7 @@ NtReleaseMutant(IN HANDLE MutantHandle,
 
     /* Open the Object */
     Status = ObReferenceObjectByHandle(MutantHandle,
-                                       MUTANT_QUERY_STATE,
+                                       0, /* No access rights required */
                                        ExMutantObjectType,
                                        PreviousMode,
                                        (PVOID*)&Mutant,