diff --git a/dlls/wow64/registry.c b/dlls/wow64/registry.c index 5e649c8e0de..67f8f509df5 100644 --- a/dlls/wow64/registry.c +++ b/dlls/wow64/registry.c @@ -142,6 +142,46 @@ NTSTATUS WINAPI wow64_NtEnumerateValueKey( UINT *args ) } +/********************************************************************** + * wow64_NtFlushKey + */ +NTSTATUS WINAPI wow64_NtFlushKey( UINT *args ) +{ + HANDLE handle = get_handle( &args ); + + return NtFlushKey( handle ); +} + + +/********************************************************************** + * wow64_NtLoadKey + */ +NTSTATUS WINAPI wow64_NtLoadKey( UINT *args ) +{ + OBJECT_ATTRIBUTES32 *attr32 = get_ptr( &args ); + OBJECT_ATTRIBUTES32 *file32 = get_ptr( &args ); + + struct object_attr64 attr, file; + + return NtLoadKey( objattr_32to64( &attr, attr32 ), objattr_32to64( &file, file32 )); +} + + +/********************************************************************** + * wow64_NtLoadKey2 + */ +NTSTATUS WINAPI wow64_NtLoadKey2( UINT *args ) +{ + OBJECT_ATTRIBUTES32 *attr32 = get_ptr( &args ); + OBJECT_ATTRIBUTES32 *file32 = get_ptr( &args ); + ULONG flags = get_ulong( &args ); + + struct object_attr64 attr, file; + + return NtLoadKey2( objattr_32to64( &attr, attr32 ), objattr_32to64( &file, file32 ), flags ); +} + + /********************************************************************** * wow64_NtOpenKey */ @@ -305,6 +345,31 @@ NTSTATUS WINAPI wow64_NtReplaceKey( UINT *args ) } +/********************************************************************** + * wow64_NtRestoreKey + */ +NTSTATUS WINAPI wow64_NtRestoreKey( UINT *args ) +{ + HANDLE key = get_handle( &args ); + HANDLE file = get_handle( &args ); + ULONG flags = get_ulong( &args ); + + return NtRestoreKey( key, file, flags ); +} + + +/********************************************************************** + * wow64_NtSaveKey + */ +NTSTATUS WINAPI wow64_NtSaveKey( UINT *args ) +{ + HANDLE key = get_handle( &args ); + HANDLE file = get_handle( &args ); + + return NtSaveKey( key, file ); +} + + /********************************************************************** * wow64_NtSetInformationKey */ @@ -335,3 +400,16 @@ NTSTATUS WINAPI wow64_NtSetValueKey( UINT *args ) return NtSetValueKey( handle, unicode_str_32to64( &str, str32 ), index, type, data, count ); } + + +/********************************************************************** + * wow64_NtUnloadKey + */ +NTSTATUS WINAPI wow64_NtUnloadKey( UINT *args ) +{ + OBJECT_ATTRIBUTES32 *attr32 = get_ptr( &args ); + + struct object_attr64 attr; + + return NtUnloadKey( objattr_32to64( &attr, attr32 )); +} diff --git a/dlls/wow64/syscall.h b/dlls/wow64/syscall.h index 1bab23eaab9..ccb4f02c91e 100644 --- a/dlls/wow64/syscall.h +++ b/dlls/wow64/syscall.h @@ -56,8 +56,11 @@ SYSCALL_ENTRY( NtEnumerateKey ) \ SYSCALL_ENTRY( NtEnumerateValueKey ) \ SYSCALL_ENTRY( NtFindAtom ) \ + SYSCALL_ENTRY( NtFlushKey ) \ SYSCALL_ENTRY( NtGetCurrentProcessorNumber ) \ SYSCALL_ENTRY( NtListenPort ) \ + SYSCALL_ENTRY( NtLoadKey ) \ + SYSCALL_ENTRY( NtLoadKey2 ) \ SYSCALL_ENTRY( NtMakeTemporaryObject ) \ SYSCALL_ENTRY( NtOpenDirectoryObject ) \ SYSCALL_ENTRY( NtOpenEvent ) \ @@ -100,6 +103,8 @@ SYSCALL_ENTRY( NtReplyWaitReceivePort ) \ SYSCALL_ENTRY( NtRequestWaitReplyPort ) \ SYSCALL_ENTRY( NtResetEvent ) \ + SYSCALL_ENTRY( NtRestoreKey ) \ + SYSCALL_ENTRY( NtSaveKey ) \ SYSCALL_ENTRY( NtSecureConnectPort ) \ SYSCALL_ENTRY( NtSetDefaultLocale ) \ SYSCALL_ENTRY( NtSetDefaultUILanguage ) \ @@ -114,6 +119,7 @@ SYSCALL_ENTRY( NtSetValueKey ) \ SYSCALL_ENTRY( NtSignalAndWaitForSingleObject ) \ SYSCALL_ENTRY( NtTerminateJobObject ) \ + SYSCALL_ENTRY( NtUnloadKey ) \ SYSCALL_ENTRY( NtWaitForDebugEvent ) \ SYSCALL_ENTRY( NtWaitForKeyedEvent ) \ SYSCALL_ENTRY( NtWaitForMultipleObjects ) \ diff --git a/include/winternl.h b/include/winternl.h index 09804a21571..20905486766 100644 --- a/include/winternl.h +++ b/include/winternl.h @@ -3879,6 +3879,7 @@ NTSYSAPI NTSTATUS WINAPI NtIsProcessInJob(HANDLE,HANDLE); NTSYSAPI NTSTATUS WINAPI NtListenPort(HANDLE,PLPC_MESSAGE); NTSYSAPI NTSTATUS WINAPI NtLoadDriver(const UNICODE_STRING *); NTSYSAPI NTSTATUS WINAPI NtLoadKey(const OBJECT_ATTRIBUTES *,OBJECT_ATTRIBUTES *); +NTSYSAPI NTSTATUS WINAPI NtLoadKey2(const OBJECT_ATTRIBUTES *,OBJECT_ATTRIBUTES *,ULONG); NTSYSAPI NTSTATUS WINAPI NtLockFile(HANDLE,HANDLE,PIO_APC_ROUTINE,void*,PIO_STATUS_BLOCK,PLARGE_INTEGER,PLARGE_INTEGER,ULONG*,BOOLEAN,BOOLEAN); NTSYSAPI NTSTATUS WINAPI NtLockVirtualMemory(HANDLE,PVOID*,SIZE_T*,ULONG); NTSYSAPI NTSTATUS WINAPI NtMakeTemporaryObject(HANDLE);