Jacek Caban : ntdll: Return NULL key on NtCreateKey failure.

Alexandre Julliard julliard at winehq.org
Mon Oct 17 19:03:47 CDT 2016


Module: wine
Branch: master
Commit: e891be17b23f9f8007aad75209776edb7cb065b4
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=e891be17b23f9f8007aad75209776edb7cb065b4

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Oct 17 21:22:28 2016 +0200

ntdll: Return NULL key on NtCreateKey failure.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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 );




More information about the wine-cvs mailing list