Jacek Caban : ntdll: Return NULL key on NtCreateKey failure.
Module: wine Branch: master Commit: e891be17b23f9f8007aad75209776edb7cb065b4 URL: http://source.winehq.org/git/wine.git/?a=commit;h=e891be17b23f9f8007aad75209... Author: Jacek Caban <jacek(a)codeweavers.com> Date: Mon Oct 17 21:22:28 2016 +0200 ntdll: Return NULL key on NtCreateKey failure. Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ntdll/reg.c | 8 +++----- dlls/ntdll/tests/reg.c | 12 +++++++++++- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/dlls/ntdll/reg.c b/dlls/ntdll/reg.c index cb522ca..e151e91 100644 --- a/dlls/ntdll/reg.c +++ b/dlls/ntdll/reg.c @@ -71,11 +71,9 @@ NTSTATUS WINAPI NtCreateKey( PHANDLE retkey, ACCESS_MASK access, const OBJECT_AT req->options = options; wine_server_add_data( req, objattr, len ); if (class) wine_server_add_data( req, class->Buffer, class->Length ); - if (!(ret = wine_server_call( req ))) - { - *retkey = wine_server_ptr_handle( reply->hkey ); - if (dispos) *dispos = reply->created ? REG_CREATED_NEW_KEY : REG_OPENED_EXISTING_KEY; - } + ret = wine_server_call( req ); + *retkey = wine_server_ptr_handle( reply->hkey ); + if (dispos && !ret) *dispos = reply->created ? REG_CREATED_NEW_KEY : REG_OPENED_EXISTING_KEY; } SERVER_END_REQ; diff --git a/dlls/ntdll/tests/reg.c b/dlls/ntdll/tests/reg.c index c15d6a8..7d2e566 100644 --- a/dlls/ntdll/tests/reg.c +++ b/dlls/ntdll/tests/reg.c @@ -364,16 +364,22 @@ static void test_NtOpenKey(void) /* Zero accessmask */ attr.Length = sizeof(attr); + key = (HANDLE)0xdeadbeef; status = pNtOpenKey(&key, 0, &attr); todo_wine ok(status == STATUS_ACCESS_DENIED, "Expected STATUS_ACCESS_DENIED, got: 0x%08x\n", status); +todo_wine + ok(!key, "key = %p\n", key); if (status == STATUS_SUCCESS) NtClose(key); /* Calling without parent key requres full registry path. */ pRtlCreateUnicodeStringFromAsciiz( &str, "Machine" ); InitializeObjectAttributes(&attr, &str, 0, 0, 0); + key = (HANDLE)0xdeadbeef; status = pNtOpenKey(&key, KEY_READ, &attr); todo_wine ok(status == STATUS_OBJECT_PATH_SYNTAX_BAD, "NtOpenKey Failed: 0x%08x\n", status); +todo_wine + ok(!key, "key = %p\n", key); pRtlFreeUnicodeString( &str ); /* Open is case sensitive unless OBJ_CASE_INSENSITIVE is specified. */ @@ -1070,8 +1076,10 @@ static void test_symlinks(void) /* try opening the target through the link */ attr.ObjectName = &link_str; + key = (HANDLE)0xdeadbeef; status = pNtOpenKey( &key, KEY_ALL_ACCESS, &attr ); ok( status == STATUS_OBJECT_NAME_NOT_FOUND, "NtOpenKey wrong status 0x%08x\n", status ); + ok( !key, "key = %p\n", key ); attr.ObjectName = &target_str; status = pNtCreateKey( &key, KEY_ALL_ACCESS, &attr, 0, 0, 0, 0 ); @@ -1271,8 +1279,10 @@ static void test_symlinks(void) ok( status == STATUS_SUCCESS || status == STATUS_OBJECT_NAME_NOT_FOUND, "NtOpenKey wrong status 0x%08x\n", status ); - status = pNtCreateKey( &key, KEY_ALL_ACCESS, &attr, 0, 0, REG_OPTION_CREATE_LINK, 0 ); + key = (HKEY)0xdeadbeef; + status = pNtCreateKey( &key, KEY_ALL_ACCESS, &attr, 0, 0, REG_OPTION_CREATE_LINK, NULL ); ok( status == STATUS_OBJECT_NAME_COLLISION, "NtCreateKey failed: 0x%08x\n", status ); + ok( !key, "key = %p\n", key ); status = pNtDeleteKey( link ); ok( status == STATUS_SUCCESS, "NtDeleteKey failed: 0x%08x\n", status );
participants (1)
-
Alexandre Julliard