From 94812b126536ff5793c40068c0cedcfb2cb1a553 Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Tue, 25 Jul 2023 12:56:57 +0200 Subject: [PATCH] userenv: Fix setting ALLUSERSPROFILE and ProgramData in CreateEnvironmentBlock. This syncs the code with dlls/ntdll/unix/env.c add_registry_environment. It fixes ALLUSERSPROFILE and ProgramData environment variables value in services. --- dlls/userenv/tests/userenv.c | 7 +++++-- dlls/userenv/userenv_main.c | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/dlls/userenv/tests/userenv.c b/dlls/userenv/tests/userenv.c index 3f2b3442832..a440f538723 100644 --- a/dlls/userenv/tests/userenv.c +++ b/dlls/userenv/tests/userenv.c @@ -78,7 +78,7 @@ static void test_create_env(void) BOOL r, is_wow64 = FALSE; HANDLE htok; WCHAR * env[4]; - char * st, systemroot[100], programdata[100]; + char * st, systemroot[100], programdata[100], allusersprofile[100]; int i, j; static const struct profile_item common_vars[] = { @@ -186,7 +186,7 @@ static void test_create_env(void) } /* Test for common environment variables (post NT4) */ - if (!GetEnvironmentVariableA("ALLUSERSPROFILE", NULL, 0)) + if (!GetEnvironmentVariableA("ALLUSERSPROFILE", allusersprofile, sizeof(allusersprofile))) { win_skip("Some environment variables are not present on NT4\n"); } @@ -198,6 +198,9 @@ static void test_create_env(void) { r = get_env(env[j], common_post_nt4_vars[i].name, &st); expect_env(TRUE, r, common_post_nt4_vars[i].name); + if (!strcmp(common_post_nt4_vars[i].name, "ALLUSERSPROFILE") || + !strcmp(common_post_nt4_vars[i].name, "ProgramData")) + ok(!strcmp(st + strlen(common_post_nt4_vars[i].name) + 1, allusersprofile), "%s\n", st); if (r) HeapFree(GetProcessHeap(), 0, st); } } diff --git a/dlls/userenv/userenv_main.c b/dlls/userenv/userenv_main.c index 2b5171254dc..cadb45c1a74 100644 --- a/dlls/userenv/userenv_main.c +++ b/dlls/userenv/userenv_main.c @@ -242,7 +242,7 @@ BOOL WINAPI CreateEnvironmentBlock( LPVOID* lpEnvironment, profiles_dir[len] = '\0'; } - if (get_reg_value(env, hkey, L"Public", buf, UNICODE_STRING_MAX_CHARS)) + if (get_reg_value(env, hkey, L"ProgramData", buf, UNICODE_STRING_MAX_CHARS)) { set_env_var(&env, L"ALLUSERSPROFILE", buf); set_env_var(&env, L"ProgramData", buf);