From 0c74c67286c1c0b64c15c40d97efa3dd13677b34 Mon Sep 17 00:00:00 2001 From: Lei Zhang Date: Wed, 30 Apr 2008 22:27:38 -0700 Subject: [PATCH 5/5] userenv: handle uninherited case in CreateEnvironmentBlock. --- dlls/userenv/tests/userenv.c | 30 +++++++++++++++--------------- dlls/userenv/userenv_main.c | 25 +++++++++++++++++++++---- 2 files changed, 36 insertions(+), 19 deletions(-) diff --git a/dlls/userenv/tests/userenv.c b/dlls/userenv/tests/userenv.c index eccb1f1..b83c9cd 100644 --- a/dlls/userenv/tests/userenv.c +++ b/dlls/userenv/tests/userenv.c @@ -164,25 +164,25 @@ static void test_create_env(void) static const struct profile_item common_vars[] = { { "ALLUSERSPROFILE", { 1, 1, 1, 1 } }, { "CommonProgramFiles", { 1, 1, 1, 1 } }, - { "ComSpec", { 1, 1, 0, 0 } }, + { "ComSpec", { 0, 0, 0, 0 } }, { "COMPUTERNAME", { 1, 1, 1, 1 } }, - { "NUMBER_OF_PROCESSORS", { 1, 1, 0, 0 } }, - { "OS", { 1, 1, 0, 0 } }, - { "PROCESSOR_ARCHITECTURE", { 1, 1, 0, 0 } }, - { "PROCESSOR_IDENTIFIER", { 1, 1, 0, 0 } }, - { "PROCESSOR_LEVEL", { 1, 1, 0, 0 } }, - { "PROCESSOR_REVISION", { 1, 1, 0, 0 } }, - { "SystemDrive", { 1, 1, 0, 0 } }, - { "SystemRoot", { 1, 1, 0, 0 } }, - { "windir", { 1, 1, 0, 0 } }, - { "ProgramFiles", { 1, 1, 0, 0 } }, + { "NUMBER_OF_PROCESSORS", { 0, 0, 0, 0 } }, + { "OS", { 0, 0, 0, 0 } }, + { "PROCESSOR_ARCHITECTURE", { 0, 0, 0, 0 } }, + { "PROCESSOR_IDENTIFIER", { 0, 0, 0, 0 } }, + { "PROCESSOR_LEVEL", { 0, 0, 0, 0 } }, + { "PROCESSOR_REVISION", { 0, 0, 0, 0 } }, + { "SystemDrive", { 0, 0, 0, 0 } }, + { "SystemRoot", { 0, 0, 0, 0 } }, + { "windir", { 0, 0, 0, 0 } }, + { "ProgramFiles", { 0, 0, 0, 0 } }, { 0, { 0, 0, 0, 0 } } }; static const struct profile_item htok_vars[] = { - { "PATH", { 1, 1, 0, 0 } }, - { "TEMP", { 1, 1, 0, 0 } }, - { "TMP", { 1, 1, 0, 0 } }, - { "USERPROFILE", { 1, 1, 0, 0 } }, + { "PATH", { 0, 0, 0, 0 } }, + { "TEMP", { 0, 0, 0, 0 } }, + { "TMP", { 0, 0, 0, 0 } }, + { "USERPROFILE", { 0, 0, 0, 0 } }, { 0, { 0, 0, 0, 0 } } }; diff --git a/dlls/userenv/userenv_main.c b/dlls/userenv/userenv_main.c index 1eaaa71..f8613e6 100644 --- a/dlls/userenv/userenv_main.c +++ b/dlls/userenv/userenv_main.c @@ -59,10 +59,27 @@ BOOL WINAPI CreateEnvironmentBlock( LPVOID* lpEnvironment, if (!lpEnvironment) return FALSE; - r = RtlCreateEnvironment(bInherit, (WCHAR **)lpEnvironment); - if (r == STATUS_SUCCESS) - return TRUE; - return FALSE; + if (hToken) FIXME("unhandled hToken\n"); + + if (bInherit) + { + r = RtlCreateEnvironment(bInherit, (WCHAR **)lpEnvironment); + if (r == STATUS_SUCCESS) + return TRUE; + return FALSE; + } + else + { + HMODULE lib; + BOOL (*pInit) (WCHAR **, BOOL); + + lib = LoadLibraryA("kernel32"); + if (!lib) return FALSE; + pInit = (void *)GetProcAddress(lib, "__wine_kernel_init_environment"); + if (!pInit) return FALSE; + + return pInit((WCHAR **)lpEnvironment, TRUE); + } } BOOL WINAPI ExpandEnvironmentStringsForUserA( HANDLE hToken, LPCSTR lpSrc, -- 1.5.2.2