From 44eac1543ef7a4fef604adaa71b717b5cbaac619 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Mon, 26 Jul 2021 13:47:07 +0200 Subject: [PATCH] wow64: Add thunks for the registry value syscalls. Signed-off-by: Alexandre Julliard --- dlls/wow64/registry.c | 86 +++++++++++++++++++++++++++++++++++++++++++ dlls/wow64/syscall.h | 5 +++ 2 files changed, 91 insertions(+) diff --git a/dlls/wow64/registry.c b/dlls/wow64/registry.c index 435c7669c28..5e649c8e0de 100644 --- a/dlls/wow64/registry.c +++ b/dlls/wow64/registry.c @@ -27,6 +27,9 @@ #include "winnt.h" #include "winternl.h" #include "wow64_private.h" +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(wow); /********************************************************************** @@ -93,6 +96,20 @@ NTSTATUS WINAPI wow64_NtDeleteKey( UINT *args ) } +/********************************************************************** + * wow64_NtDeleteValueKey + */ +NTSTATUS WINAPI wow64_NtDeleteValueKey( UINT *args ) +{ + HANDLE handle = get_handle( &args ); + UNICODE_STRING32 *str32 = get_ptr( &args ); + + UNICODE_STRING str; + + return NtDeleteValueKey( handle, unicode_str_32to64( &str, str32 )); +} + + /********************************************************************** * wow64_NtEnumerateKey */ @@ -109,6 +126,22 @@ NTSTATUS WINAPI wow64_NtEnumerateKey( UINT *args ) } +/********************************************************************** + * wow64_NtEnumerateValueKey + */ +NTSTATUS WINAPI wow64_NtEnumerateValueKey( UINT *args ) +{ + HANDLE handle = get_handle( &args ); + ULONG index = get_ulong( &args ); + KEY_VALUE_INFORMATION_CLASS class = get_ulong( &args ); + void *ptr = get_ptr( &args ); + ULONG len = get_ulong( &args ); + ULONG *retlen = get_ptr( &args ); + + return NtEnumerateValueKey( handle, index, class, ptr, len, retlen ); +} + + /********************************************************************** * wow64_NtOpenKey */ @@ -208,6 +241,41 @@ NTSTATUS WINAPI wow64_NtQueryKey( UINT *args ) } +/********************************************************************** + * wow64_NtQueryMultipleValueKey + */ +NTSTATUS WINAPI wow64_NtQueryMultipleValueKey( UINT *args ) +{ + HANDLE handle = get_handle( &args ); + KEY_MULTIPLE_VALUE_INFORMATION *info = get_ptr( &args ); + ULONG count = get_ulong( &args ); + void *ptr = get_ptr( &args ); + ULONG len = get_ulong( &args ); + ULONG *retlen = get_ptr( &args ); + + FIXME( "%p %p %u %p %u %p: stub\n", handle, info, count, ptr, len, retlen ); + return STATUS_SUCCESS; +} + + +/********************************************************************** + * wow64_NtQueryValueKey + */ +NTSTATUS WINAPI wow64_NtQueryValueKey( UINT *args ) +{ + HANDLE handle = get_handle( &args ); + UNICODE_STRING32 *str32 = get_ptr( &args ); + KEY_VALUE_INFORMATION_CLASS class = get_ulong( &args ); + void *ptr = get_ptr( &args ); + ULONG len = get_ulong( &args ); + ULONG *retlen = get_ptr( &args ); + + UNICODE_STRING str; + + return NtQueryValueKey( handle, unicode_str_32to64( &str, str32 ), class, ptr, len, retlen ); +} + + /********************************************************************** * wow64_NtRenameKey */ @@ -249,3 +317,21 @@ NTSTATUS WINAPI wow64_NtSetInformationKey( UINT *args ) return NtSetInformationKey( handle, class, info, len ); } + + +/********************************************************************** + * wow64_NtSetValueKey + */ +NTSTATUS WINAPI wow64_NtSetValueKey( UINT *args ) +{ + HANDLE handle = get_handle( &args ); + const UNICODE_STRING32 *str32 = get_ptr( &args ); + ULONG index = get_ulong( &args ); + ULONG type = get_ulong( &args ); + const void *data = get_ptr( &args ); + ULONG count = get_ulong( &args ); + + UNICODE_STRING str; + + return NtSetValueKey( handle, unicode_str_32to64( &str, str32 ), index, type, data, count ); +} diff --git a/dlls/wow64/syscall.h b/dlls/wow64/syscall.h index cf579576839..1bab23eaab9 100644 --- a/dlls/wow64/syscall.h +++ b/dlls/wow64/syscall.h @@ -51,8 +51,10 @@ SYSCALL_ENTRY( NtDelayExecution ) \ SYSCALL_ENTRY( NtDeleteAtom ) \ SYSCALL_ENTRY( NtDeleteKey ) \ + SYSCALL_ENTRY( NtDeleteValueKey ) \ SYSCALL_ENTRY( NtDuplicateObject ) \ SYSCALL_ENTRY( NtEnumerateKey ) \ + SYSCALL_ENTRY( NtEnumerateValueKey ) \ SYSCALL_ENTRY( NtFindAtom ) \ SYSCALL_ENTRY( NtGetCurrentProcessorNumber ) \ SYSCALL_ENTRY( NtListenPort ) \ @@ -80,6 +82,7 @@ SYSCALL_ENTRY( NtQueryInstallUILanguage ) \ SYSCALL_ENTRY( NtQueryIoCompletion ) \ SYSCALL_ENTRY( NtQueryKey ) \ + SYSCALL_ENTRY( NtQueryMultipleValueKey ) \ SYSCALL_ENTRY( NtQueryMutant ) \ SYSCALL_ENTRY( NtQueryObject ) \ SYSCALL_ENTRY( NtQueryPerformanceCounter ) \ @@ -88,6 +91,7 @@ SYSCALL_ENTRY( NtQuerySymbolicLinkObject ) \ SYSCALL_ENTRY( NtQueryTimer ) \ SYSCALL_ENTRY( NtQueryTimerResolution ) \ + SYSCALL_ENTRY( NtQueryValueKey ) \ SYSCALL_ENTRY( NtReleaseKeyedEvent ) \ SYSCALL_ENTRY( NtReleaseMutant ) \ SYSCALL_ENTRY( NtReleaseSemaphore ) \ @@ -107,6 +111,7 @@ SYSCALL_ENTRY( NtSetPowerRequest ) \ SYSCALL_ENTRY( NtSetTimer ) \ SYSCALL_ENTRY( NtSetTimerResolution ) \ + SYSCALL_ENTRY( NtSetValueKey ) \ SYSCALL_ENTRY( NtSignalAndWaitForSingleObject ) \ SYSCALL_ENTRY( NtTerminateJobObject ) \ SYSCALL_ENTRY( NtWaitForDebugEvent ) \