From 52fbaae3ccc592c15b478d662f8b952d8d55acf0 Mon Sep 17 00:00:00 2001
From: Alexandre Julliard <julliard@winehq.org>
Date: Mon, 2 Dec 2024 16:29:18 +0100
Subject: [PATCH] server: Make CurrentControlSet a symlink in new prefixes.

Based on a patch by Torge Matthies.
---
 server/registry.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/server/registry.c b/server/registry.c
index fefbcd6efdc..3f02faaaefd 100644
--- a/server/registry.c
+++ b/server/registry.c
@@ -1886,10 +1886,17 @@ void init_registry(void)
                                     'C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\',
                                     'P','e','r','f','l','i','b','\\',
                                     '0','0','9'};
+    static const WCHAR controlset[] = {'S','y','s','t','e','m','\\',
+                                       'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t'};
+    static const WCHAR controlset001_path[] = {'\\','R','e','g','i','s','t','r','y','\\',
+                                               'M','a','c','h','i','n','e','\\',
+                                               'S','y','s','t','e','m','\\',
+                                               'C','o','n','t','r','o','l','S','e','t','0','0','1'};
     static const struct unicode_str root_name = { REGISTRY, sizeof(REGISTRY) };
     static const struct unicode_str HKLM_name = { HKLM, sizeof(HKLM) };
     static const struct unicode_str HKU_name = { HKU_default, sizeof(HKU_default) };
     static const struct unicode_str perflib_name = { perflib, sizeof(perflib) };
+    static const struct unicode_str controlset_name = { controlset, sizeof(controlset) };
 
     WCHAR *current_user_path;
     struct unicode_str current_user_str;
@@ -1917,6 +1924,13 @@ void init_registry(void)
             prefix_type = PREFIX_32BIT;
         else
             prefix_type = sizeof(void *) > sizeof(int) ? PREFIX_64BIT : PREFIX_32BIT;
+
+        if ((key = create_key_recursive( hklm, &controlset_name, current_time )))
+        {
+            key->flags |= KEY_SYMLINK;
+            set_value( key, &symlink_str, REG_LINK, controlset001_path, sizeof(controlset001_path) );
+            release_object( key );
+        }
     }
     else if (prefix_type == PREFIX_UNKNOWN)
         prefix_type = PREFIX_32BIT;
-- 
GitLab