Add missing processor architecture cases
[reactos.git] / reactos / ntoskrnl / se / priv.c
index 65e5e77..752279e 100644 (file)
@@ -1,12 +1,11 @@
 /* $Id$
  *
- * COPYRIGHT:         See COPYING in the top level directory
- * PROJECT:           ReactOS kernel
- * PURPOSE:           Security manager
- * FILE:              kernel/se/priv.c
- * PROGRAMER:         ?
- * REVISION HISTORY:
- *                 26/07/98: Added stubs for security functions
+ * COPYRIGHT:       See COPYING in the top level directory
+ * PROJECT:         ReactOS kernel
+ * FILE:            ntoskrnl/se/priv.c
+ * PURPOSE:         Security manager
+ *
+ * PROGRAMMERS:     No programmer listed.
  */
 
 /* INCLUDES *****************************************************************/
 #define NDEBUG
 #include <internal/debug.h>
 
+#if defined (ALLOC_PRAGMA)
+#pragma alloc_text(INIT, SepInitPrivileges)
+#endif
+
 
 /* GLOBALS *******************************************************************/
 
@@ -41,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;
@@ -94,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,
@@ -110,6 +125,8 @@ SepPrivilegeCheck (PTOKEN Token,
 
   DPRINT ("SepPrivilegeCheck() called\n");
 
+  PAGED_CODE();
+
   if (PreviousMode == KernelMode)
     {
       return TRUE;
@@ -156,6 +173,7 @@ SepPrivilegeCheck (PTOKEN Token,
 
 
 NTSTATUS
+NTAPI
 SeCaptureLuidAndAttributesArray (PLUID_AND_ATTRIBUTES Src,
                                 ULONG PrivilegeCount,
                                 KPROCESSOR_MODE PreviousMode,
@@ -169,6 +187,8 @@ SeCaptureLuidAndAttributesArray (PLUID_AND_ATTRIBUTES Src,
   PLUID_AND_ATTRIBUTES* NewMem;
   ULONG SrcLength;
 
+  PAGED_CODE();
+
   if (PrivilegeCount == 0)
     {
       *Dest = 0;
@@ -209,10 +229,13 @@ SeCaptureLuidAndAttributesArray (PLUID_AND_ATTRIBUTES Src,
 
 
 VOID
+NTAPI
 SeReleaseLuidAndAttributesArray (PLUID_AND_ATTRIBUTES Privilege,
                                 KPROCESSOR_MODE PreviousMode,
                                 ULONG a)
 {
+  PAGED_CODE();
+
   ExFreePool (Privilege);
 }
 
@@ -227,12 +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))
@@ -293,6 +321,8 @@ SePrivilegeCheck (PPRIVILEGE_SET Privileges,
 {
   PACCESS_TOKEN Token = NULL;
 
+  PAGED_CODE();
+
   if (SubjectContext->ClientToken == NULL)
     {
       Token = SubjectContext->PrimaryToken;
@@ -325,6 +355,8 @@ SeSinglePrivilegeCheck (IN LUID PrivilegeValue,
   PRIVILEGE_SET Priv;
   BOOLEAN Result;
 
+  PAGED_CODE();
+
   SeCaptureSubjectContext (&SubjectContext);
 
   Priv.PrivilegeCount = 1;