diff --git a/dlls/kernel/relay16.c b/dlls/kernel/relay16.c
index d8398ea..e7ac9f8 100644
--- a/dlls/kernel/relay16.c
+++ b/dlls/kernel/relay16.c
@@ -109,30 +109,30 @@
     OBJECT_ATTRIBUTES attr;
     UNICODE_STRING name;
     char buffer[1024];
-    HKEY hkey;
+    HKEY root, hkey;
     DWORD count;
     WCHAR *str;
-    static const WCHAR configW[] = {'M','a','c','h','i','n','e','\\',
-                                    'S','o','f','t','w','a','r','e','\\',
+    static const WCHAR configW[] = {'S','o','f','t','w','a','r','e','\\',
                                     'W','i','n','e','\\',
-                                    'W','i','n','e','\\',
-                                    'C','o','n','f','i','g','\\',
                                     'D','e','b','u','g',0};
     static const WCHAR RelayIncludeW[] = {'R','e','l','a','y','I','n','c','l','u','d','e',0};
     static const WCHAR RelayExcludeW[] = {'R','e','l','a','y','E','x','c','l','u','d','e',0};
     static const WCHAR SnoopIncludeW[] = {'S','n','o','o','p','I','n','c','l','u','d','e',0};
     static const WCHAR SnoopExcludeW[] = {'S','n','o','o','p','E','x','c','l','u','d','e',0};
 
+    RtlOpenCurrentUser( KEY_ALL_ACCESS, &root );
     attr.Length = sizeof(attr);
-    attr.RootDirectory = 0;
+    attr.RootDirectory = root;
     attr.ObjectName = &name;
     attr.Attributes = 0;
     attr.SecurityDescriptor = NULL;
     attr.SecurityQualityOfService = NULL;
     RtlInitUnicodeString( &name, configW );
 
-    /* @@ Wine registry key: HKLM\Software\Wine\Wine\Config\Debug */
-    if (NtOpenKey( &hkey, KEY_ALL_ACCESS, &attr )) return;
+    /* @@ Wine registry key: HKCU\Software\Wine\Debug */
+    if (NtOpenKey( &hkey, KEY_ALL_ACCESS, &attr )) hkey = 0;
+    NtClose( root );
+    if (!hkey) return;
 
     str = (WCHAR *)((KEY_VALUE_PARTIAL_INFORMATION *)buffer)->Data;
     RtlInitUnicodeString( &name, RelayIncludeW );
diff --git a/dlls/ntdll/relay.c b/dlls/ntdll/relay.c
index bb1a105..ee5aa49 100644
--- a/dlls/ntdll/relay.c
+++ b/dlls/ntdll/relay.c
@@ -113,14 +113,11 @@
     OBJECT_ATTRIBUTES attr;
     UNICODE_STRING name;
     char buffer[1024];
-    HKEY hkey;
+    HKEY root, hkey;
     DWORD count;
     WCHAR *str;
-    static const WCHAR configW[] = {'M','a','c','h','i','n','e','\\',
-                                    'S','o','f','t','w','a','r','e','\\',
+    static const WCHAR configW[] = {'S','o','f','t','w','a','r','e','\\',
                                     'W','i','n','e','\\',
-                                    'W','i','n','e','\\',
-                                    'C','o','n','f','i','g','\\',
                                     'D','e','b','u','g',0};
     static const WCHAR RelayIncludeW[] = {'R','e','l','a','y','I','n','c','l','u','d','e',0};
     static const WCHAR RelayExcludeW[] = {'R','e','l','a','y','E','x','c','l','u','d','e',0};
@@ -131,16 +128,19 @@
     static const WCHAR SnoopFromIncludeW[] = {'S','n','o','o','p','F','r','o','m','I','n','c','l','u','d','e',0};
     static const WCHAR SnoopFromExcludeW[] = {'S','n','o','o','p','F','r','o','m','E','x','c','l','u','d','e',0};
 
+    RtlOpenCurrentUser( KEY_ALL_ACCESS, &root );
     attr.Length = sizeof(attr);
-    attr.RootDirectory = 0;
+    attr.RootDirectory = root;
     attr.ObjectName = &name;
     attr.Attributes = 0;
     attr.SecurityDescriptor = NULL;
     attr.SecurityQualityOfService = NULL;
     RtlInitUnicodeString( &name, configW );
 
-    /* @@ Wine registry key: HKLM\Software\Wine\Wine\Config\Debug */
-    if (NtOpenKey( &hkey, KEY_ALL_ACCESS, &attr )) return;
+    /* @@ Wine registry key: HKCU\Software\Wine\Debug */
+    if (NtOpenKey( &hkey, KEY_ALL_ACCESS, &attr )) hkey = 0;
+    NtClose( root );
+    if (!hkey) return;
 
     str = (WCHAR *)((KEY_VALUE_PARTIAL_INFORMATION *)buffer)->Data;
     RtlInitUnicodeString( &name, RelayIncludeW );
diff --git a/dlls/user/spy.c b/dlls/user/spy.c
index 60769b1..eb7e67d 100644
--- a/dlls/user/spy.c
+++ b/dlls/user/spy.c
@@ -2584,8 +2584,8 @@
     if (!TRACE_ON(message)) return TRUE;
 
     indent_tls_index = TlsAlloc();
-    /* @@ Wine registry key: HKLM\Software\Wine\Wine\Config\Debug */
-    if(!RegOpenKeyA(HKEY_LOCAL_MACHINE, "Software\\Wine\\Wine\\Config\\Debug", &hkey))
+    /* @@ Wine registry key: HKCU\Software\Wine\Debug */
+    if(!RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Wine\\Debug", &hkey))
     {
         DWORD type, count = sizeof(buffer);
 
