CVS: winex/dlls/ntdll nt.c,1.16,1.17

[email protected] 31 Jul 2007 19:41:20 -0000
Newsgroups gmane.comp.emulators.winex.cvs
Message-ID <[email protected]>
Subject: winex/dlls/ntdll nt.c,1.16,1.17Update of /var/lib/cvsd/cvsroot/winex/dlls/ntdll
In directory agravaine:/tmp/cvs-serv31551/dlls/ntdll

Modified Files:
	nt.c 
Log Message:

- implement LookupPrivilegeName[AW]
- implement LookupPrivilegeValue[AW]
- better implement NtQueryInformationToken() for TokenPrivileges class


Index: nt.c
===================================================================
RCS file: /var/lib/cvsd/cvsroot/winex/dlls/ntdll/nt.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -d -r1.16 -r1.17
--- nt.c	29 Mar 2007 14:01:45 -0000	1.16
+++ nt.c	31 Jul 2007 19:41:18 -0000	1.17
@@ -374,7 +374,7 @@
 {
     unsigned int len = 0;
 
-    FIXME("(%08x,%d,%p,%ld,%p): stub\n",
+    FIXME("(%08x,%d,%p,%ld,%p): partial stub\n",
           token,tokeninfoclass,tokeninfo,tokeninfolength,retlen);
 
     switch (tokeninfoclass)
@@ -386,7 +386,7 @@
         len = sizeof(TOKEN_GROUPS);
         break;
     case TokenPrivileges:
-        len = sizeof(TOKEN_PRIVILEGES);
+        len = sizeof(TOKEN_PRIVILEGES) + (19 * sizeof (LUID_AND_ATTRIBUTES));
         break;
     case TokenOwner:
         len = sizeof(TOKEN_OWNER);
@@ -450,7 +450,32 @@
         if (tokeninfo)
         {
             TOKEN_PRIVILEGES *tpriv = tokeninfo;
-            tpriv->PrivilegeCount = 1;
+
+            /* These settings match those for an admin-priv token on XP SP2 */
+            LUID_AND_ATTRIBUTES LuidArr[20] = {
+               {{SE_CHANGE_NOTIFY_PRIVILEGE, 0}, SE_PRIVILEGE_ENABLED | SE_PRIVILEGE_ENABLED_BY_DEFAULT},
+               {{SE_SECURITY_PRIVILEGE, 0}, 0},
+               {{SE_BACKUP_PRIVILEGE, 0}, 0},
+               {{SE_RESTORE_PRIVILEGE, 0}, 0},
+               {{SE_SYSTEMTIME_PRIVILEGE, 0}, 0},
+               {{SE_SHUTDOWN_PRIVILEGE, 0}, 0},
+               {{SE_REMOTE_SHUTDOWN_PRIVILEGE, 0}, 0},
+               {{SE_TAKE_OWNERSHIP_PRIVILEGE, 0}, 0},
+               {{SE_DEBUG_PRIVILEGE, 0}, SE_PRIVILEGE_ENABLED},
+               {{SE_SYSTEM_ENVIRONMENT_PRIVILEGE, 0}, 0},
+               {{SE_SYSTEM_PROFILE_PRIVILEGE, 0}, 0},
+               {{SE_PROF_SINGLE_PROCESS_PRIVILEGE, 0}, 0},
+               {{SE_INC_BASE_PRIORITY_PRIVILEGE, 0}, 0},
+               {{SE_LOAD_DRIVER_PRIVILEGE, 0}, SE_PRIVILEGE_ENABLED},
+               {{SE_CREATE_PAGEFILE_PRIVILEGE, 0}, 0},
+               {{SE_INCREASE_QUOTA_PRIVILEGE, 0}, 0},
+               {{SE_UNDOCK_PRIVILEGE, 0}, SE_PRIVILEGE_ENABLED},
+               {{SE_MANAGE_VOLUME_PRIVILEGE, 0}, 0},
+               {{SE_IMPERSONATE_PRIVILEGE, 0}, SE_PRIVILEGE_ENABLED | SE_PRIVILEGE_ENABLED_BY_DEFAULT},
+               {{SE_CREATE_GLOBAL_PRIVILEGE, 0}, SE_PRIVILEGE_ENABLED | SE_PRIVILEGE_ENABLED_BY_DEFAULT}};
+
+            tpriv->PrivilegeCount = 20;
+            memcpy (tpriv->Privileges, LuidArr, sizeof (LuidArr));
         }
         break;
     case TokenOwner: