From: Dmitry Timoshkov dmitry@baikal.ru
SQL Native Client ODBC driver fails to load if GetProcAddress("NtCompareTokens") returns NULL, however it never calls it.
Important: Run 'tools/make_specfiles' after applying the patch to update the syscalls list.
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/ntdll/ntdll.spec | 4 ++-- dlls/ntdll/unix/server.c | 10 ++++++++++ dlls/wow64/security.c | 12 ++++++++++++ include/winternl.h | 1 + 4 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec index 1908a089d44..90b64627ce5 100644 --- a/dlls/ntdll/ntdll.spec +++ b/dlls/ntdll/ntdll.spec @@ -161,7 +161,7 @@ @ stdcall -syscall NtCommitTransaction(long long) # @ stub NtCompactKeys @ stdcall -syscall NtCompareObjects(ptr ptr) -# @ stub NtCompareTokens +@ stdcall -syscall NtCompareTokens(ptr ptr ptr) @ stdcall -syscall NtCompleteConnectPort(ptr) # @ stub NtCompressKey @ stdcall -syscall NtConnectPort(ptr ptr ptr ptr ptr ptr ptr ptr) @@ -1211,7 +1211,7 @@ # @ stub ZwCloseObjectAuditAlarm # @ stub ZwCompactKeys @ stdcall -private -syscall ZwCompareObjects(ptr ptr) NtCompareObjects -# @ stub ZwCompareTokens +@ stdcall -private -syscall ZwCompareTokens(ptr ptr ptr) NtCompareTokens @ stdcall -private -syscall ZwCompleteConnectPort(ptr) NtCompleteConnectPort # @ stub ZwCompressKey @ stdcall -private -syscall ZwConnectPort(ptr ptr ptr ptr ptr ptr ptr ptr) NtConnectPort diff --git a/dlls/ntdll/unix/server.c b/dlls/ntdll/unix/server.c index 53fcc61ccf3..69e6567c911 100644 --- a/dlls/ntdll/unix/server.c +++ b/dlls/ntdll/unix/server.c @@ -1822,6 +1822,16 @@ NTSTATUS WINAPI NtCompareObjects( HANDLE first, HANDLE second ) }
+/************************************************************************** + * NtCompareTokens (NTDLL.@) + */ +NTSTATUS WINAPI NtCompareTokens( HANDLE first, HANDLE second, BOOLEAN *equal ) +{ + FIXME( "%p,%p,%p: stub\n", first, second, equal ); + return STATUS_NOT_IMPLEMENTED; +} + + /************************************************************************** * NtClose */ diff --git a/dlls/wow64/security.c b/dlls/wow64/security.c index 26d413baa13..1a3d98fccee 100644 --- a/dlls/wow64/security.c +++ b/dlls/wow64/security.c @@ -236,6 +236,18 @@ NTSTATUS WINAPI wow64_NtFilterToken( UINT *args ) }
+/********************************************************************** + * wow64_NtCompareTokens + */ +NTSTATUS WINAPI wow64_NtCompareTokens( UINT *args ) +{ + HANDLE first = get_handle( &args ); + HANDLE second = get_handle( &args ); + BOOLEAN *equal = get_ptr( &args ); + + return NtCompareTokens( first, second, equal ); +} + /********************************************************************** * wow64_NtImpersonateAnonymousToken */ diff --git a/include/winternl.h b/include/winternl.h index ff8756211a1..b72be6f5f04 100644 --- a/include/winternl.h +++ b/include/winternl.h @@ -4355,6 +4355,7 @@ NTSYSAPI NTSTATUS WINAPI NtClose(HANDLE); NTSYSAPI NTSTATUS WINAPI NtCloseObjectAuditAlarm(PUNICODE_STRING,HANDLE,BOOLEAN); NTSYSAPI NTSTATUS WINAPI NtCommitTransaction(HANDLE,BOOLEAN); NTSYSAPI NTSTATUS WINAPI NtCompareObjects(HANDLE,HANDLE); +NTSYSAPI NTSTATUS WINAPI NtCompareTokens(HANDLE,HANDLE,BOOLEAN*); NTSYSAPI NTSTATUS WINAPI NtCompleteConnectPort(HANDLE); NTSYSAPI NTSTATUS WINAPI NtConnectPort(PHANDLE,PUNICODE_STRING,PSECURITY_QUALITY_OF_SERVICE,PLPC_SECTION_WRITE,PLPC_SECTION_READ,PULONG,PVOID,PULONG); NTSYSAPI NTSTATUS WINAPI NtContinue(PCONTEXT,BOOLEAN);