From: Santino Mazza smazza@codeweavers.com
Signed-off-by: Santino Mazza smazza@codeweavers.com --- dlls/ntdll/ntdll.spec | 1 + dlls/ntdll/unix/loader.c | 1 + dlls/ntdll/unix/registry.c | 10 ++++++++++ dlls/wow64/registry.c | 24 ++++++++++++++++++++++++ dlls/wow64/syscall.h | 1 + include/winternl.h | 1 + 6 files changed, 38 insertions(+)
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec index c294490d544..7469763e7dc 100644 --- a/dlls/ntdll/ntdll.spec +++ b/dlls/ntdll/ntdll.spec @@ -244,6 +244,7 @@ @ stdcall -syscall NtLoadDriver(ptr) @ stdcall -syscall NtLoadKey2(ptr ptr long) @ stdcall -syscall NtLoadKey(ptr ptr) +@ stdcall -syscall NtLoadKeyEx(ptr ptr long long long long ptr ptr) @ stdcall -syscall NtLockFile(long long ptr ptr ptr ptr ptr ptr long long) # @ stub NtLockProductActivationKeys # @ stub NtLockRegistryKey diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c index f58a716d08c..b78efddee1f 100644 --- a/dlls/ntdll/unix/loader.c +++ b/dlls/ntdll/unix/loader.c @@ -203,6 +203,7 @@ static void * const syscalls[] = NtLoadDriver, NtLoadKey, NtLoadKey2, + NtLoadKeyEx, NtLockFile, NtLockVirtualMemory, NtMakeTemporaryObject, diff --git a/dlls/ntdll/unix/registry.c b/dlls/ntdll/unix/registry.c index 693a594e84b..8af3fda7f0c 100644 --- a/dlls/ntdll/unix/registry.c +++ b/dlls/ntdll/unix/registry.c @@ -729,6 +729,16 @@ NTSTATUS WINAPI NtLoadKey2( const OBJECT_ATTRIBUTES *attr, OBJECT_ATTRIBUTES *fi return NtLoadKey( attr, file ); }
+/****************************************************************************** + * NtLoadKeyEx (NTDLL.@) + */ +NTSTATUS WINAPI NtLoadKeyEx( const OBJECT_ATTRIBUTES *attr, OBJECT_ATTRIBUTES *file, ULONG flags, HANDLE trustkey, + HANDLE event, ACCESS_MASK access, HANDLE *roothandle, IO_STATUS_BLOCK *iostatus ) +{ + FIXME( "(%p,%p,0x%08x,%p,%p,0x%08x,%p,%p) stub\n", attr, file, flags, trustkey, event, + access, roothandle, iostatus ); + return STATUS_NOT_IMPLEMENTED; +}
/****************************************************************************** * NtUnloadKey (NTDLL.@) diff --git a/dlls/wow64/registry.c b/dlls/wow64/registry.c index dfb75d72bc7..2d2da744479 100644 --- a/dlls/wow64/registry.c +++ b/dlls/wow64/registry.c @@ -181,6 +181,30 @@ NTSTATUS WINAPI wow64_NtLoadKey2( UINT *args ) return NtLoadKey2( objattr_32to64( &attr, attr32 ), objattr_32to64( &file, file32 ), flags ); }
+/********************************************************************** + * wow64_NtLoadKeyEx + */ +NTSTATUS WINAPI wow64_NtLoadKeyEx( UINT *args ) +{ + OBJECT_ATTRIBUTES32 *attr32 = get_ptr( &args ); + OBJECT_ATTRIBUTES32 *file32 = get_ptr( &args ); + ULONG flags = get_ulong( &args ); + HANDLE trustkey = get_handle( &args ); + HANDLE event = get_handle( &args ); + ACCESS_MASK desired_access = get_ulong( &args ); + HANDLE *rootkey = get_ptr( &args ); + IO_STATUS_BLOCK32 *io32 = get_ptr( &args ); + + struct object_attr64 attr, file; + IO_STATUS_BLOCK io; + NTSTATUS status; + + status = NtLoadKeyEx( objattr_32to64( &attr, attr32 ), objattr_32to64( &file, file32 ), flags, + trustkey, event, desired_access, rootkey, iosb_32to64( &io, io32 ) ); + put_iosb( io32, &io ); + return status; +} +
/********************************************************************** * wow64_NtNotifyChangeKey diff --git a/dlls/wow64/syscall.h b/dlls/wow64/syscall.h index 65fbca89f4f..b2b1ad6c2a8 100644 --- a/dlls/wow64/syscall.h +++ b/dlls/wow64/syscall.h @@ -104,6 +104,7 @@ SYSCALL_ENTRY( NtLoadDriver ) \ SYSCALL_ENTRY( NtLoadKey ) \ SYSCALL_ENTRY( NtLoadKey2 ) \ + SYSCALL_ENTRY( NtLoadKeyEx ) \ SYSCALL_ENTRY( NtLockFile ) \ SYSCALL_ENTRY( NtLockVirtualMemory ) \ SYSCALL_ENTRY( NtMakeTemporaryObject ) \ diff --git a/include/winternl.h b/include/winternl.h index 19354dd7ffb..beb0cb7aa05 100644 --- a/include/winternl.h +++ b/include/winternl.h @@ -4024,6 +4024,7 @@ 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 NtLoadKeyEx(const OBJECT_ATTRIBUTES *,OBJECT_ATTRIBUTES *,ULONG,HANDLE,HANDLE,ACCESS_MASK,HANDLE *,IO_STATUS_BLOCK *); 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);
From: Santino Mazza smazza@codeweavers.com
Signed-off-by: Santino Mazza smazza@codeweavers.com --- dlls/ntdll/unix/registry.c | 42 ++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 22 deletions(-)
diff --git a/dlls/ntdll/unix/registry.c b/dlls/ntdll/unix/registry.c index 8af3fda7f0c..d316c36ab6c 100644 --- a/dlls/ntdll/unix/registry.c +++ b/dlls/ntdll/unix/registry.c @@ -680,6 +680,25 @@ NTSTATUS WINAPI NtFlushKey( HANDLE key ) * NtLoadKey (NTDLL.@) */ NTSTATUS WINAPI NtLoadKey( const OBJECT_ATTRIBUTES *attr, OBJECT_ATTRIBUTES *file ) +{ + TRACE( "(%p,%p\n)", attr, file ); + return NtLoadKeyEx( attr, file, 0, 0, 0, 0, NULL, NULL ); +} + +/****************************************************************************** + * NtLoadKey2 (NTDLL.@) + */ +NTSTATUS WINAPI NtLoadKey2( const OBJECT_ATTRIBUTES *attr, OBJECT_ATTRIBUTES *file, ULONG flags ) +{ + if (flags) FIXME( "unhandled flag %x\n", flags ); + return NtLoadKey( attr, file ); +} + +/****************************************************************************** + * NtLoadKeyEx (NTDLL.@) + */ +NTSTATUS WINAPI NtLoadKeyEx( const OBJECT_ATTRIBUTES *attr, OBJECT_ATTRIBUTES *file, ULONG flags, HANDLE trustkey, + HANDLE event, ACCESS_MASK access, HANDLE *roothandle, IO_STATUS_BLOCK *iostatus ) { NTSTATUS ret; HANDLE key; @@ -689,7 +708,7 @@ NTSTATUS WINAPI NtLoadKey( const OBJECT_ATTRIBUTES *attr, OBJECT_ATTRIBUTES *fil UNICODE_STRING nt_name; OBJECT_ATTRIBUTES new_attr = *file;
- TRACE("(%p,%p)\n", attr, file); + TRACE( "(%p,%p,0x%x,%p,%p,0x%x,%p,%p)\n", attr, file, flags, trustkey, event, access, roothandle, iostatus );
get_redirect( &new_attr, &nt_name ); if (!(ret = nt_to_unix_file_name( &new_attr, &unix_name, FILE_OPEN ))) @@ -719,27 +738,6 @@ NTSTATUS WINAPI NtLoadKey( const OBJECT_ATTRIBUTES *attr, OBJECT_ATTRIBUTES *fil return ret; }
- -/****************************************************************************** - * NtLoadKey2 (NTDLL.@) - */ -NTSTATUS WINAPI NtLoadKey2( const OBJECT_ATTRIBUTES *attr, OBJECT_ATTRIBUTES *file, ULONG flags ) -{ - FIXME( "(%p,%p,0x%08x) semi-stub: ignoring flags\n", attr, file, flags ); - return NtLoadKey( attr, file ); -} - -/****************************************************************************** - * NtLoadKeyEx (NTDLL.@) - */ -NTSTATUS WINAPI NtLoadKeyEx( const OBJECT_ATTRIBUTES *attr, OBJECT_ATTRIBUTES *file, ULONG flags, HANDLE trustkey, - HANDLE event, ACCESS_MASK access, HANDLE *roothandle, IO_STATUS_BLOCK *iostatus ) -{ - FIXME( "(%p,%p,0x%08x,%p,%p,0x%08x,%p,%p) stub\n", attr, file, flags, trustkey, event, - access, roothandle, iostatus ); - return STATUS_NOT_IMPLEMENTED; -} - /****************************************************************************** * NtUnloadKey (NTDLL.@) */