More complete stubs for DuplicateTokenEx and NtAdjustPrivilegesToken

Dmitry Timoshkov dmitry at baikal.ru
Wed Feb 9 06:48:07 CST 2005


Hello,

Changelog:
    Dmitry Timoshkov <dmitry at codeweavers.com>
    More complete stubs for DuplicateTokenEx and NtAdjustPrivilegesToken.

diff -up cvs/hq/wine/dlls/advapi32/security.c wine/dlls/advapi32/security.c
--- cvs/hq/wine/dlls/advapi32/security.c	2005-01-06 15:17:26.000000000 +0800
+++ wine/dlls/advapi32/security.c	2005-02-09 20:37:51.000000000 +0800
@@ -2996,10 +2996,17 @@ BOOL WINAPI DuplicateTokenEx(
         TOKEN_TYPE TokenType,
         PHANDLE DuplicateTokenHandle )
 {
-    FIXME("%p 0x%08lx 0x%08x 0x%08x %p - stub\n", ExistingTokenHandle, dwDesiredAccess,
-          ImpersonationLevel, TokenType, DuplicateTokenHandle);
+    OBJECT_ATTRIBUTES attr;
 
-    return FALSE;
+    attr.Length = sizeof(attr);
+    attr.RootDirectory = 0;
+    attr.ObjectName = NULL;
+    attr.Attributes = (lpTokenAttributes && lpTokenAttributes->bInheritHandle) ? OBJ_INHERIT : 0;
+    attr.SecurityDescriptor = lpTokenAttributes ? lpTokenAttributes->lpSecurityDescriptor : NULL;
+    attr.SecurityQualityOfService = NULL;
+
+    return set_ntstatus( NtDuplicateToken(ExistingTokenHandle, dwDesiredAccess, &attr,
+                         ImpersonationLevel, TokenType, DuplicateTokenHandle) );
 }
 
 BOOL WINAPI DuplicateToken(
diff -up cvs/hq/wine/dlls/ntdll/nt.c wine/dlls/ntdll/nt.c
--- cvs/hq/wine/dlls/ntdll/nt.c	2005-01-31 08:53:59.000000000 +0800
+++ wine/dlls/ntdll/nt.c	2005-02-09 20:37:51.000000000 +0800
@@ -162,9 +162,11 @@ NTSTATUS WINAPI NtAdjustPrivilegesToken(
 	OUT PTOKEN_PRIVILEGES PreviousState,
 	OUT PDWORD ReturnLength)
 {
-	FIXME("(%p,0x%08x,%p,0x%08lx,%p,%p),stub!\n",
-	TokenHandle, DisableAllPrivileges, NewState, BufferLength, PreviousState, ReturnLength);
-	return 0;
+    FIXME("(%p,%d,%p,0x%08lx,%p,%p),stub!\n",
+        TokenHandle, DisableAllPrivileges, NewState, BufferLength, PreviousState, ReturnLength);
+
+    return NtQueryInformationToken(TokenHandle, TokenPrivileges, PreviousState,
+                                   BufferLength, ReturnLength);
 }
 
 /******************************************************************************
@@ -221,8 +223,7 @@ NTSTATUS WINAPI NtQueryInformationToken(
 #endif /* 0 */
     }
 
-    /* FIXME: what if retlen == NULL ? */
-    *retlen = len;
+    if (retlen) *retlen = len;
 
     if (tokeninfolength < len)
         return STATUS_BUFFER_TOO_SMALL;
diff -up cvs/hq/wine/include/winternl.h wine/include/winternl.h
--- cvs/hq/wine/include/winternl.h	2005-01-31 08:54:06.000000000 +0800
+++ wine/include/winternl.h	2005-02-09 20:37:51.000000000 +0800
@@ -1396,6 +1396,7 @@ NTSTATUS  WINAPI NtDeleteKey(HKEY);
 NTSTATUS  WINAPI NtDeleteValueKey(HKEY,const UNICODE_STRING *);
 NTSTATUS  WINAPI NtDeviceIoControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);
 NTSTATUS  WINAPI NtDuplicateObject(HANDLE,HANDLE,HANDLE,PHANDLE,ACCESS_MASK,ULONG,ULONG);
+NTSTATUS  WINAPI NtDuplicateToken(HANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,SECURITY_IMPERSONATION_LEVEL,TOKEN_TYPE,PHANDLE);
 NTSTATUS  WINAPI NtEnumerateKey(HKEY,ULONG,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
 NTSTATUS  WINAPI NtEnumerateValueKey(HKEY,ULONG,KEY_VALUE_INFORMATION_CLASS,PVOID,ULONG,PULONG);
 NTSTATUS  WINAPI NtFlushBuffersFile(HANDLE,IO_STATUS_BLOCK*);






More information about the wine-patches mailing list