From df77e490d89a0582fde621d54f834acfd9588ef9 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Tue, 5 Apr 2016 16:20:05 +0200 Subject: [PATCH] advapi32: Fix return value of RegNotifyChangeKeyValue for pending events. Signed-off-by: Sebastian Lackner Signed-off-by: Alexandre Julliard --- dlls/advapi32/registry.c | 2 +- dlls/advapi32/tests/registry.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/dlls/advapi32/registry.c b/dlls/advapi32/registry.c index 79923842d95..4b3d852048e 100644 --- a/dlls/advapi32/registry.c +++ b/dlls/advapi32/registry.c @@ -2760,7 +2760,7 @@ LSTATUS WINAPI RegNotifyChangeKeyValue( HKEY hkey, BOOL fWatchSubTree, fdwNotifyFilter, fWatchSubTree, NULL, 0, fAsync); - if (status && status != STATUS_TIMEOUT) + if (status && status != STATUS_PENDING) return RtlNtStatusToDosError( status ); return ERROR_SUCCESS; diff --git a/dlls/advapi32/tests/registry.c b/dlls/advapi32/tests/registry.c index f877b3602df..82f501570a0 100644 --- a/dlls/advapi32/tests/registry.c +++ b/dlls/advapi32/tests/registry.c @@ -3452,6 +3452,33 @@ static void test_RegOpenCurrentUser(void) RegCloseKey(key); } +static void test_RegNotifyChangeKeyValue(void) +{ + HKEY key, subkey; + HANDLE event; + DWORD dwret; + LONG ret; + + event = CreateEventW(NULL, FALSE, TRUE, NULL); + ok(event != NULL, "CreateEvent failed, error %u\n", GetLastError()); + ret = RegCreateKeyA(hkey_main, "TestKey", &key); + ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret); + + ret = RegNotifyChangeKeyValue(key, TRUE, REG_NOTIFY_CHANGE_NAME, event, TRUE); + ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret); + dwret = WaitForSingleObject(event, 0); + ok(dwret == WAIT_TIMEOUT, "expected WAIT_TIMEOUT, got %u\n", dwret); + + ret = RegCreateKeyA(key, "SubKey", &subkey); + ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret); + dwret = WaitForSingleObject(event, 0); + ok(dwret == WAIT_OBJECT_0, "expected WAIT_OBJECT_0, got %u\n", dwret); + + RegDeleteKeyA(key, ""); + RegCloseKey(key); + CloseHandle(event); +} + START_TEST(registry) { /* Load pointers for functions that are not available in all Windows versions */ @@ -3486,6 +3513,7 @@ START_TEST(registry) test_delete_value(); test_delete_key_value(); test_RegOpenCurrentUser(); + test_RegNotifyChangeKeyValue(); /* cleanup */ delete_key( hkey_main );