Signed-off-by: Torge Matthies openglfreak@googlemail.com
-- v2: loader: Add Default, Failed, and LastKnownGood values to HKLM\System\Select. server: Create link from HKLM\System\CurrentControlSet to ControlSet001. advapi32/tests: Add test for CurrentControlSet link.
From: Torge Matthies openglfreak@googlemail.com
Signed-off-by: Torge Matthies openglfreak@googlemail.com --- dlls/advapi32/tests/registry.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+)
diff --git a/dlls/advapi32/tests/registry.c b/dlls/advapi32/tests/registry.c index 8bffefe8628..b33392ac632 100644 --- a/dlls/advapi32/tests/registry.c +++ b/dlls/advapi32/tests/registry.c @@ -4955,6 +4955,39 @@ static void test_RegRenameKey(void) RegCloseKey(key); }
+static inline BOOL check_cs_number( const WCHAR *str ) +{ + if (str[0] < '0' || str[0] > '9' || str[1] < '0' || str[1] > '9' || str[2] < '0' || str[2] > '9') + return FALSE; + if (str[0] == '0' && str[1] == '0' && str[2] == '0') + return FALSE; + return TRUE; +} + +static void test_control_set_symlink(void) +{ + static const WCHAR target_pfxW[] = L"\REGISTRY\Machine\System\ControlSet"; + DWORD target_len, type, len, err; + BYTE buffer[1024]; + HKEY key; + + target_len = sizeof(target_pfxW) + 3 * sizeof(WCHAR); + + err = RegOpenKeyExA( HKEY_LOCAL_MACHINE, "System\CurrentControlSet", REG_OPTION_OPEN_LINK, KEY_ALL_ACCESS, &key ); + ok( err == ERROR_SUCCESS, "RegOpenKeyEx failed error %lu\n", err ); + len = sizeof(buffer); + err = RegQueryValueExA( key, "SymbolicLinkValue", NULL, &type, buffer, &len ); + todo_wine + ok( err == ERROR_SUCCESS, "RegQueryValueEx failed error %lu\n", err ); + todo_wine + ok( len == target_len - sizeof(WCHAR), "wrong len %lu\n", len ); + todo_wine + ok( !_wcsnicmp( (WCHAR*)buffer, target_pfxW, ARRAY_SIZE(target_pfxW) - 1 ) && + check_cs_number( (WCHAR*)buffer + ARRAY_SIZE(target_pfxW) - 1 ), + "wrong link target\n" ); + RegCloseKey( key ); +} + START_TEST(registry) { /* Load pointers for functions that are not available in all Windows versions */ @@ -4996,6 +5029,7 @@ START_TEST(registry) test_EnumDynamicTimeZoneInformation(); test_perflib_key(); test_RegRenameKey(); + test_control_set_symlink();
/* cleanup */ delete_key( hkey_main );
From: Torge Matthies openglfreak@googlemail.com
Signed-off-by: Torge Matthies openglfreak@googlemail.com --- dlls/advapi32/tests/registry.c | 3 --- server/registry.c | 21 +++++++++++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/dlls/advapi32/tests/registry.c b/dlls/advapi32/tests/registry.c index b33392ac632..f6369a5ef3c 100644 --- a/dlls/advapi32/tests/registry.c +++ b/dlls/advapi32/tests/registry.c @@ -4977,11 +4977,8 @@ static void test_control_set_symlink(void) ok( err == ERROR_SUCCESS, "RegOpenKeyEx failed error %lu\n", err ); len = sizeof(buffer); err = RegQueryValueExA( key, "SymbolicLinkValue", NULL, &type, buffer, &len ); - todo_wine ok( err == ERROR_SUCCESS, "RegQueryValueEx failed error %lu\n", err ); - todo_wine ok( len == target_len - sizeof(WCHAR), "wrong len %lu\n", len ); - todo_wine ok( !_wcsnicmp( (WCHAR*)buffer, target_pfxW, ARRAY_SIZE(target_pfxW) - 1 ) && check_cs_number( (WCHAR*)buffer + ARRAY_SIZE(target_pfxW) - 1 ), "wrong link target\n" ); diff --git a/server/registry.c b/server/registry.c index 3fea7dd79a4..794bdd12838 100644 --- a/server/registry.c +++ b/server/registry.c @@ -1892,10 +1892,18 @@ 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 system[] = {'S','y','s','t','e','m'}; + static const WCHAR ccs[] = {'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t'}; + static const WCHAR cs001[] = {'\','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 system_name = { system, sizeof(system) }; + static const struct unicode_str ccs_name = { ccs, sizeof(ccs) };
WCHAR *current_user_path; struct unicode_str current_user_str; @@ -1973,6 +1981,19 @@ void init_registry(void) release_object( key ); }
+ if ((key = create_key_recursive( hklm, &system_name, current_time ))) + { + struct key *subkey; + subkey = create_key_object( &key->obj, &ccs_name, OBJ_OPENIF | OBJ_OPENLINK, 0, current_time, NULL ); + release_object( key ); + if (subkey) + { + subkey->flags |= KEY_SYMLINK; + set_value( subkey, &symlink_str, REG_LINK, cs001, sizeof(cs001) ); + release_object( subkey ); + } + } + release_object( hklm ); release_object( hkcu );
From: Torge Matthies openglfreak@googlemail.com
Signed-off-by: Torge Matthies openglfreak@googlemail.com --- loader/wine.inf.in | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/loader/wine.inf.in b/loader/wine.inf.in index 347af35af6d..9145a5b176d 100644 --- a/loader/wine.inf.in +++ b/loader/wine.inf.in @@ -602,6 +602,9 @@ HKLM,System\CurrentControlSet\Control\TimeZoneInformation,"TimeZoneKeyName",2,"" HKLM,System\CurrentControlSet\Control\VirtualDeviceDrivers,,16 HKLM,System\CurrentControlSet\Control\VMM32Files,,16 HKLM,System\Select,"Current",0x10003,1 +HKLM,System\Select,"Default",0x10003,1 +HKLM,System\Select,"Failed",0x10003,0 +HKLM,System\Select,"LastKnownGood",0x10003,1 HKCU,AppEvents\Schemes\Apps\Explorer\Navigating.Current,,,"" HKCU,Software\Microsoft\Protected Storage System Provider,,16 ; Some apps requires at least four subkeys of Active Setup\Installed Components
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=136242
Your paranoid android.
=== w7u_adm (32 bit report) ===
advapi32: registry.c:4977: Test failed: RegOpenKeyEx failed error 5 registry.c:4980: Test failed: RegQueryValueEx failed error 6 registry.c:4981: Test failed: wrong len 1024 registry.c:4982: Test failed: wrong link target
=== w8adm (32 bit report) ===
advapi32: registry.c:4977: Test failed: RegOpenKeyEx failed error 5 registry.c:4980: Test failed: RegQueryValueEx failed error 6 registry.c:4981: Test failed: wrong len 1024 registry.c:4982: Test failed: wrong link target
=== w1064_adm (64 bit report) ===
advapi32: registry.c:4977: Test failed: RegOpenKeyEx failed error 5 registry.c:4980: Test failed: RegQueryValueEx failed error 6 registry.c:4981: Test failed: wrong len 1024 registry.c:4982: Test failed: wrong link target
On Tue Aug 15 12:19:59 2023 +0000, Jinoh Kang wrote:
The KB article says it's a "pointer" to ControlSet00X (X determined by
System\Select\Default if boot is successful), which I assume means it's a symlink. Would you mind adding a test for this? See `REG_LINK` tests in advapi32:registry for an example.
Done, I added a test to advapi32/tests that checks the link target (and thus implicitly verifies that it's a link).
On Wed Aug 16 11:12:51 2023 +0000, **** wrote:
Marvin replied on the mailing list:
Hi, It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated. The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details: The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=136242 Your paranoid android. === w7u_adm (32 bit report) === advapi32: registry.c:4977: Test failed: RegOpenKeyEx failed error 5 registry.c:4980: Test failed: RegQueryValueEx failed error 6 registry.c:4981: Test failed: wrong len 1024 registry.c:4982: Test failed: wrong link target === w8adm (32 bit report) === advapi32: registry.c:4977: Test failed: RegOpenKeyEx failed error 5 registry.c:4980: Test failed: RegQueryValueEx failed error 6 registry.c:4981: Test failed: wrong len 1024 registry.c:4982: Test failed: wrong link target === w1064_adm (64 bit report) === advapi32: registry.c:4977: Test failed: RegOpenKeyEx failed error 5 registry.c:4980: Test failed: RegQueryValueEx failed error 6 registry.c:4981: Test failed: wrong len 1024 registry.c:4982: Test failed: wrong link target
Access Denied... Looks like this test can only succeed with admin privileges.