Module: wine Branch: refs/heads/master Commit: 978f4706924f37322aba17493f4cec96c737a21e URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=978f4706924f37322aba1749...
Author: Vitaliy Margolen wine-patch@kievinfo.com Date: Thu Jan 12 13:32:09 2006 +0100
ntdll: NtQueryInformationToken change parameters according to PSDK. Check for NULL pointer.
---
dlls/ntdll/nt.c | 23 ++++++++++++----------- include/winternl.h | 2 +- 2 files changed, 13 insertions(+), 12 deletions(-)
diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c index 3fe44cb..5d40c4c 100644 --- a/dlls/ntdll/nt.c +++ b/dlls/ntdll/nt.c @@ -189,15 +189,15 @@ NTSTATUS WINAPI NtAdjustPrivilegesToken( */ NTSTATUS WINAPI NtQueryInformationToken( HANDLE token, - DWORD tokeninfoclass, - LPVOID tokeninfo, - DWORD tokeninfolength, - LPDWORD retlen ) + TOKEN_INFORMATION_CLASS tokeninfoclass, + PVOID tokeninfo, + ULONG tokeninfolength, + PULONG retlen ) { - unsigned int len = 0; + ULONG len; NTSTATUS status = STATUS_SUCCESS;
- TRACE("(%p,%ld,%p,%ld,%p)\n", + TRACE("(%p,%d,%p,%ld,%p)\n", token,tokeninfoclass,tokeninfo,tokeninfolength,retlen);
switch (tokeninfoclass) @@ -224,10 +224,11 @@ NTSTATUS WINAPI NtQueryInformationToken( case TokenImpersonationLevel: case TokenStatistics: #endif /* 0 */ + default: + len = 0; }
- /* FIXME: what if retlen == NULL ? */ - *retlen = len; + if (retlen) *retlen = len;
if (tokeninfolength < len) return STATUS_BUFFER_TOO_SMALL; @@ -244,7 +245,7 @@ NTSTATUS WINAPI NtQueryInformationToken( req->handle = token; wine_server_set_reply( req, sid, sid_len ); status = wine_server_call( req ); - *retlen = reply->user_len + sizeof(TOKEN_USER); + if (retlen) *retlen = reply->user_len + sizeof(TOKEN_USER); if (status == STATUS_SUCCESS) { tuser->User.Sid = sid; @@ -291,7 +292,7 @@ NTSTATUS WINAPI NtQueryInformationToken( if (tpriv && tokeninfolength > FIELD_OFFSET( TOKEN_PRIVILEGES, Privileges )) wine_server_set_reply( req, &tpriv->Privileges, tokeninfolength - FIELD_OFFSET( TOKEN_PRIVILEGES, Privileges ) ); status = wine_server_call( req ); - *retlen = FIELD_OFFSET( TOKEN_PRIVILEGES, Privileges ) + reply->len; + if (retlen) *retlen = FIELD_OFFSET( TOKEN_PRIVILEGES, Privileges ) + reply->len; if (tpriv) tpriv->PrivilegeCount = reply->len / sizeof(LUID_AND_ATTRIBUTES); } SERVER_END_REQ; @@ -309,7 +310,7 @@ NTSTATUS WINAPI NtQueryInformationToken( break; default: { - ERR("Unhandled Token Information class %ld!\n", tokeninfoclass); + ERR("Unhandled Token Information class %d!\n", tokeninfoclass); return STATUS_NOT_IMPLEMENTED; } } diff --git a/include/winternl.h b/include/winternl.h index 0a7b110..67403bb 100644 --- a/include/winternl.h +++ b/include/winternl.h @@ -1819,7 +1819,7 @@ NTSTATUS WINAPI NtQueryInformationFile( NTSTATUS WINAPI NtQueryInformationPort(HANDLE,PORT_INFORMATION_CLASS,PVOID,ULONG,PULONG); NTSTATUS WINAPI NtQueryInformationProcess(HANDLE,PROCESSINFOCLASS,PVOID,ULONG,PULONG); NTSTATUS WINAPI NtQueryInformationThread(HANDLE,THREADINFOCLASS,PVOID,ULONG,PULONG); -NTSTATUS WINAPI NtQueryInformationToken(HANDLE,DWORD,LPVOID,DWORD,LPDWORD); +NTSTATUS WINAPI NtQueryInformationToken(HANDLE,TOKEN_INFORMATION_CLASS,PVOID,ULONG,PULONG); NTSTATUS WINAPI NtQueryInstallUILanguage(LANGID*); NTSTATUS WINAPI NtQueryIntervalProfile(KPROFILE_SOURCE,PULONG); NTSTATUS WINAPI NtQueryIoCompletion(HANDLE,IO_COMPLETION_INFORMATION_CLASS,PVOID,ULONG,PULONG);