Alexandre Julliard : ntdll: Implemented NtOpenProcessTokenEx and NtOpenThreadTokenEx.
Alexandre Julliard
julliard at winehq.org
Fri Sep 5 06:57:40 CDT 2008
Module: wine
Branch: master
Commit: 0327f84a2f9e70b416146ee97fdccb1827fe38b4
URL: http://source.winehq.org/git/wine.git/?a=commit;h=0327f84a2f9e70b416146ee97fdccb1827fe38b4
Author: Alexandre Julliard <julliard at winehq.org>
Date: Thu Sep 4 21:57:13 2008 +0200
ntdll: Implemented NtOpenProcessTokenEx and NtOpenThreadTokenEx.
---
dlls/ntdll/nt.c | 44 +++++++++++++++++++++++++++++++-------------
dlls/ntdll/ntdll.spec | 16 ++++++++--------
include/winternl.h | 2 ++
3 files changed, 41 insertions(+), 21 deletions(-)
diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c
index 18b8309..3ca1755 100644
--- a/dlls/ntdll/nt.c
+++ b/dlls/ntdll/nt.c
@@ -96,21 +96,30 @@ NTSTATUS WINAPI NtOpenProcessToken(
DWORD DesiredAccess,
HANDLE *TokenHandle)
{
+ return NtOpenProcessTokenEx( ProcessHandle, DesiredAccess, 0, TokenHandle );
+}
+
+/******************************************************************************
+ * NtOpenProcessTokenEx [NTDLL.@]
+ * ZwOpenProcessTokenEx [NTDLL.@]
+ */
+NTSTATUS WINAPI NtOpenProcessTokenEx( HANDLE process, DWORD access, DWORD attributes,
+ HANDLE *handle )
+{
NTSTATUS ret;
- TRACE("(%p,0x%08x,%p)\n", ProcessHandle,DesiredAccess, TokenHandle);
+ TRACE("(%p,0x%08x,0x%08x,%p)\n", process, access, attributes, handle);
SERVER_START_REQ( open_token )
{
- req->handle = ProcessHandle;
- req->access = DesiredAccess;
- req->attributes = 0;
+ req->handle = process;
+ req->access = access;
+ req->attributes = attributes;
req->flags = 0;
ret = wine_server_call( req );
- if (!ret) *TokenHandle = reply->token;
+ if (!ret) *handle = reply->token;
}
SERVER_END_REQ;
-
return ret;
}
@@ -124,20 +133,29 @@ NTSTATUS WINAPI NtOpenThreadToken(
BOOLEAN OpenAsSelf,
HANDLE *TokenHandle)
{
+ return NtOpenThreadTokenEx( ThreadHandle, DesiredAccess, OpenAsSelf, 0, TokenHandle );
+}
+
+/******************************************************************************
+ * NtOpenThreadTokenEx [NTDLL.@]
+ * ZwOpenThreadTokenEx [NTDLL.@]
+ */
+NTSTATUS WINAPI NtOpenThreadTokenEx( HANDLE thread, DWORD access, BOOLEAN as_self, DWORD attributes,
+ HANDLE *handle )
+{
NTSTATUS ret;
- TRACE("(%p,0x%08x,0x%08x,%p)\n",
- ThreadHandle,DesiredAccess, OpenAsSelf, TokenHandle);
+ TRACE("(%p,0x%08x,%u,0x%08x,%p)\n", thread, access, as_self, attributes, handle );
SERVER_START_REQ( open_token )
{
- req->handle = ThreadHandle;
- req->access = DesiredAccess;
- req->attributes = 0;
+ req->handle = thread;
+ req->access = access;
+ req->attributes = attributes;
req->flags = OPEN_TOKEN_THREAD;
- if (OpenAsSelf) req->flags |= OPEN_TOKEN_AS_SELF;
+ if (as_self) req->flags |= OPEN_TOKEN_AS_SELF;
ret = wine_server_call( req );
- if (!ret) *TokenHandle = reply->token;
+ if (!ret) *handle = reply->token;
}
SERVER_END_REQ;
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec
index e18f3a3..696124e 100644
--- a/dlls/ntdll/ntdll.spec
+++ b/dlls/ntdll/ntdll.spec
@@ -214,14 +214,14 @@
@ stdcall NtOpenMutant(ptr long ptr)
@ stub NtOpenObjectAuditAlarm
@ stdcall NtOpenProcess(ptr long ptr ptr)
-@ stdcall NtOpenProcessToken(long long long)
-# @ stub NtOpenProcessTokenEx
+@ stdcall NtOpenProcessToken(long long ptr)
+@ stdcall NtOpenProcessTokenEx(long long long ptr)
@ stdcall NtOpenSection(ptr long ptr)
@ stdcall NtOpenSemaphore(long long ptr)
@ stdcall NtOpenSymbolicLinkObject (ptr long ptr)
@ stdcall NtOpenThread(ptr long ptr ptr)
-@ stdcall NtOpenThreadToken(long long long long)
-# @ stub NtOpenThreadTokenEx
+@ stdcall NtOpenThreadToken(long long long ptr)
+@ stdcall NtOpenThreadTokenEx(long long long long ptr)
@ stdcall NtOpenTimer(ptr long ptr)
@ stub NtPlugPlayControl
@ stdcall NtPowerInformation(long ptr long ptr long)
@@ -1058,14 +1058,14 @@
@ stdcall ZwOpenMutant(ptr long ptr) NtOpenMutant
@ stub ZwOpenObjectAuditAlarm
@ stdcall ZwOpenProcess(ptr long ptr ptr) NtOpenProcess
-@ stdcall ZwOpenProcessToken(long long long) NtOpenProcessToken
-# @ stub ZwOpenProcessTokenEx
+@ stdcall ZwOpenProcessToken(long long ptr) NtOpenProcessToken
+@ stdcall ZwOpenProcessTokenEx(long long long ptr) NtOpenProcessTokenEx
@ stdcall ZwOpenSection(ptr long ptr) NtOpenSection
@ stdcall ZwOpenSemaphore(long long ptr) NtOpenSemaphore
@ stdcall ZwOpenSymbolicLinkObject (ptr long ptr) NtOpenSymbolicLinkObject
@ stdcall ZwOpenThread(ptr long ptr ptr) NtOpenThread
-@ stdcall ZwOpenThreadToken(long long long long) NtOpenThreadToken
-# @ stub ZwOpenThreadTokenEx
+@ stdcall ZwOpenThreadToken(long long long ptr) NtOpenThreadToken
+@ stdcall ZwOpenThreadTokenEx(long long long long ptr) NtOpenThreadTokenEx
@ stdcall ZwOpenTimer(ptr long ptr) NtOpenTimer
@ stub ZwPlugPlayControl
@ stdcall ZwPowerInformation(long ptr long ptr long) NtPowerInformation
diff --git a/include/winternl.h b/include/winternl.h
index 71169fa..f254da5 100644
--- a/include/winternl.h
+++ b/include/winternl.h
@@ -1942,11 +1942,13 @@ NTSYSAPI NTSTATUS WINAPI NtOpenMutant(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUT
NTSYSAPI NTSTATUS WINAPI NtOpenObjectAuditAlarm(PUNICODE_STRING,PHANDLE,PUNICODE_STRING,PUNICODE_STRING,PSECURITY_DESCRIPTOR,HANDLE,ACCESS_MASK,ACCESS_MASK,PPRIVILEGE_SET,BOOLEAN,BOOLEAN,PBOOLEAN);
NTSYSAPI NTSTATUS WINAPI NtOpenProcess(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const CLIENT_ID*);
NTSYSAPI NTSTATUS WINAPI NtOpenProcessToken(HANDLE,DWORD,HANDLE *);
+NTSYSAPI NTSTATUS WINAPI NtOpenProcessTokenEx(HANDLE,DWORD,DWORD,HANDLE *);
NTSYSAPI NTSTATUS WINAPI NtOpenSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
NTSYSAPI NTSTATUS WINAPI NtOpenSemaphore(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
NTSYSAPI NTSTATUS WINAPI NtOpenSymbolicLinkObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
NTSYSAPI NTSTATUS WINAPI NtOpenThread(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const CLIENT_ID*);
NTSYSAPI NTSTATUS WINAPI NtOpenThreadToken(HANDLE,DWORD,BOOLEAN,HANDLE *);
+NTSYSAPI NTSTATUS WINAPI NtOpenThreadTokenEx(HANDLE,DWORD,BOOLEAN,DWORD,HANDLE *);
NTSYSAPI NTSTATUS WINAPI NtOpenTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*);
NTSYSAPI NTSTATUS WINAPI NtPowerInformation(POWER_INFORMATION_LEVEL,PVOID,ULONG,PVOID,ULONG);
NTSYSAPI NTSTATUS WINAPI NtPrivilegeCheck(HANDLE,PPRIVILEGE_SET,PBOOLEAN);
More information about the wine-cvs
mailing list