[NTOSKRNL]
[reactos.git] / reactos / ntoskrnl / se / priv.c
index 8f419cf..0766492 100644 (file)
@@ -215,14 +215,10 @@ SeCaptureLuidAndAttributesArray (PLUID_AND_ATTRIBUTES Src,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
-        
-        if (!NT_SUCCESS(Status))
-        {
-            return Status;
-        }
     }
     
     /* allocate enough memory or check if the provided buffer is
@@ -241,7 +237,7 @@ SeCaptureLuidAndAttributesArray (PLUID_AND_ATTRIBUTES Src,
         *Dest = ExAllocatePool(PoolType,
                                BufferSize);
         
-        if (&Dest == NULL)
+        if (*Dest == NULL)
         {
             return STATUS_INSUFFICIENT_RESOURCES;
         }
@@ -289,7 +285,7 @@ SeReleaseLuidAndAttributesArray (PLUID_AND_ATTRIBUTES Privilege,
  * @unimplemented
  */
 NTSTATUS
-STDCALL
+NTAPI
 SeAppendPrivileges(PACCESS_STATE AccessState,
                    PPRIVILEGE_SET Privileges)
 {
@@ -298,19 +294,20 @@ SeAppendPrivileges(PACCESS_STATE AccessState,
 }
 
 /*
- * @unimplemented
+ * @implemented
  */
 VOID
-STDCALL
+NTAPI
 SeFreePrivileges(IN PPRIVILEGE_SET Privileges)
 {
-    UNIMPLEMENTED;
+    PAGED_CODE();
+    ExFreePool(Privileges);
 }
 
 /*
  * @implemented
  */
-BOOLEAN STDCALL
+BOOLEAN NTAPI
 SePrivilegeCheck (PPRIVILEGE_SET Privileges,
                   PSECURITY_SUBJECT_CONTEXT SubjectContext,
                   KPROCESSOR_MODE PreviousMode)
@@ -342,7 +339,7 @@ SePrivilegeCheck (PPRIVILEGE_SET Privileges,
 /*
  * @implemented
  */
-BOOLEAN STDCALL
+BOOLEAN NTAPI
 SeSinglePrivilegeCheck (IN LUID PrivilegeValue,
                         IN KPROCESSOR_MODE PreviousMode)
 {
@@ -379,7 +376,7 @@ SeSinglePrivilegeCheck (IN LUID PrivilegeValue,
 
 /* SYSTEM CALLS ***************************************************************/
 
-NTSTATUS STDCALL
+NTSTATUS NTAPI
 NtPrivilegeCheck (IN HANDLE ClientToken,
                   IN PPRIVILEGE_SET RequiredPrivileges,
                   OUT PBOOLEAN Result)
@@ -391,7 +388,7 @@ NtPrivilegeCheck (IN HANDLE ClientToken,
     ULONG Length;
     BOOLEAN CheckResult;
     KPROCESSOR_MODE PreviousMode;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     
     PAGED_CODE();
     
@@ -415,8 +412,7 @@ NtPrivilegeCheck (IN HANDLE ClientToken,
                              Privilege[PrivilegeCount]) /
                 sizeof(RequiredPrivileges->Privilege[0]) != PrivilegeCount)
             {
-                Status = STATUS_INVALID_PARAMETER;
-                _SEH2_LEAVE;
+                _SEH2_YIELD(return STATUS_INVALID_PARAMETER);
             }
             
             /* probe all of the array */
@@ -429,14 +425,10 @@ NtPrivilegeCheck (IN HANDLE ClientToken,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
-        
-        if (!NT_SUCCESS(Status))
-        {
-            return Status;
-        }
     }
     else
     {