Add missing processor architecture cases
[reactos.git] / reactos / ntoskrnl / se / priv.c
index a3b8137..752279e 100644 (file)
@@ -4,7 +4,7 @@
  * PROJECT:         ReactOS kernel
  * FILE:            ntoskrnl/se/priv.c
  * PURPOSE:         Security manager
- * 
+ *
  * PROGRAMMERS:     No programmer listed.
  */
 
 #define NDEBUG
 #include <internal/debug.h>
 
+#if defined (ALLOC_PRAGMA)
+#pragma alloc_text(INIT, SepInitPrivileges)
+#endif
+
 
 /* GLOBALS *******************************************************************/
 
@@ -40,11 +44,16 @@ LUID SeAuditPrivilege;
 LUID SeSystemEnvironmentPrivilege;
 LUID SeChangeNotifyPrivilege;
 LUID SeRemoteShutdownPrivilege;
+LUID SeUndockPrivilege;
+LUID SeSyncAgentPrivilege;
+LUID SeEnableDelegationPrivilege;
 
 
 /* FUNCTIONS ***************************************************************/
 
-VOID INIT_FUNCTION
+VOID
+INIT_FUNCTION
+NTAPI
 SepInitPrivileges (VOID)
 {
   SeCreateTokenPrivilege.LowPart = SE_CREATE_TOKEN_PRIVILEGE;
@@ -93,10 +102,17 @@ SepInitPrivileges (VOID)
   SeChangeNotifyPrivilege.HighPart = 0;
   SeRemoteShutdownPrivilege.LowPart = SE_REMOTE_SHUTDOWN_PRIVILEGE;
   SeRemoteShutdownPrivilege.HighPart = 0;
+  SeUndockPrivilege.LowPart = SE_UNDOCK_PRIVILEGE;
+  SeUndockPrivilege.HighPart = 0;
+  SeSyncAgentPrivilege.LowPart = SE_SYNC_AGENT_PRIVILEGE;
+  SeSyncAgentPrivilege.HighPart = 0;
+  SeEnableDelegationPrivilege.LowPart = SE_ENABLE_DELEGATION_PRIVILEGE;
+  SeEnableDelegationPrivilege.HighPart = 0;
 }
 
 
 BOOLEAN
+NTAPI
 SepPrivilegeCheck (PTOKEN Token,
                   PLUID_AND_ATTRIBUTES Privileges,
                   ULONG PrivilegeCount,
@@ -108,7 +124,7 @@ SepPrivilegeCheck (PTOKEN Token,
   ULONG k;
 
   DPRINT ("SepPrivilegeCheck() called\n");
-  
+
   PAGED_CODE();
 
   if (PreviousMode == KernelMode)
@@ -157,6 +173,7 @@ SepPrivilegeCheck (PTOKEN Token,
 
 
 NTSTATUS
+NTAPI
 SeCaptureLuidAndAttributesArray (PLUID_AND_ATTRIBUTES Src,
                                 ULONG PrivilegeCount,
                                 KPROCESSOR_MODE PreviousMode,
@@ -169,7 +186,7 @@ SeCaptureLuidAndAttributesArray (PLUID_AND_ATTRIBUTES Src,
 {
   PLUID_AND_ATTRIBUTES* NewMem;
   ULONG SrcLength;
-  
+
   PAGED_CODE();
 
   if (PrivilegeCount == 0)
@@ -212,12 +229,13 @@ SeCaptureLuidAndAttributesArray (PLUID_AND_ATTRIBUTES Src,
 
 
 VOID
+NTAPI
 SeReleaseLuidAndAttributesArray (PLUID_AND_ATTRIBUTES Privilege,
                                 KPROCESSOR_MODE PreviousMode,
                                 ULONG a)
 {
   PAGED_CODE();
-  
+
   ExFreePool (Privilege);
 }
 
@@ -232,14 +250,17 @@ NtPrivilegeCheck (IN HANDLE ClientToken,
   ULONG PrivilegeCount;
   ULONG PrivilegeControl;
   ULONG Length;
+  KPROCESSOR_MODE PreviousMode;
   NTSTATUS Status;
-  
+
   PAGED_CODE();
 
+  PreviousMode = KeGetPreviousMode();
+
   Status = ObReferenceObjectByHandle (ClientToken,
-                                     0,
+                                     TOKEN_QUERY,
                                      SepTokenObjectType,
-                                     UserMode,
+                                     PreviousMode,
                                      (PVOID*)&Token,
                                      NULL);
   if (!NT_SUCCESS(Status))
@@ -299,7 +320,7 @@ SePrivilegeCheck (PPRIVILEGE_SET Privileges,
                  KPROCESSOR_MODE PreviousMode)
 {
   PACCESS_TOKEN Token = NULL;
-  
+
   PAGED_CODE();
 
   if (SubjectContext->ClientToken == NULL)
@@ -333,7 +354,7 @@ SeSinglePrivilegeCheck (IN LUID PrivilegeValue,
   SECURITY_SUBJECT_CONTEXT SubjectContext;
   PRIVILEGE_SET Priv;
   BOOLEAN Result;
-  
+
   PAGED_CODE();
 
   SeCaptureSubjectContext (&SubjectContext);