[PATCH] ntdll: Add test for environment variables in PEB block

Fabian Maurer dark.shadow4 at web.de
Wed Mar 27 17:20:30 CDT 2019


Note that the test is interactive since it requires
a reboot (on windows) and a rerun on wine.
AFAIK there's no way around those limitations, so this is the
test I came up with.

Signed-off-by: Fabian Maurer <dark.shadow4 at web.de>
---
 dlls/ntdll/tests/env.c | 57 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 57 insertions(+)

diff --git a/dlls/ntdll/tests/env.c b/dlls/ntdll/tests/env.c
index 4e2ef8222d..41cb44ecd2 100644
--- a/dlls/ntdll/tests/env.c
+++ b/dlls/ntdll/tests/env.c
@@ -515,6 +515,59 @@ static void test_process_params(void)
     }
 }

+static BOOL setup_environment(void)
+{
+    HKEY key;
+    LSTATUS status;
+    LPCSTR value1 = "%WINETESTVAR2%";
+    LPCSTR value2 = "test ok";
+    BOOL is_ready;
+    const char *path = "System\\CurrentControlSet\\Control\\Session Manager\\Environment";
+    status = RegOpenKeyExA(HKEY_LOCAL_MACHINE, path, 0, KEY_ALL_ACCESS, &key);
+    ok(status == ERROR_SUCCESS, "RegOpenKeyExA failed with %d\n", status);
+
+    status = RegQueryValueExA(key, "WINETESTVAR1", NULL, NULL, NULL, NULL);
+    ok(status == ERROR_SUCCESS || status == ERROR_FILE_NOT_FOUND, "RegQueryValueExA failed with %d\n", status);
+    is_ready = (status == ERROR_SUCCESS);
+    if (!is_ready)
+    {
+       status = RegSetValueExA(key, "WINETESTVAR1", 0, REG_EXPAND_SZ,(LPBYTE)value1, strlen(value1) + 1);
+       ok(status == ERROR_SUCCESS, "RegSetValueExA failed with %d\n", status);
+       status = RegSetValueExA(key, "WINETESTVAR2", 0, REG_EXPAND_SZ,(LPBYTE)value2, strlen(value2) + 1);
+       ok(status == ERROR_SUCCESS, "RegSetValueExA failed with %d\n", status);
+    }
+    RegCloseKey(key);
+
+    return is_ready;
+}
+
+static void test_peb_environment(void)
+{
+    static const WCHAR result1[] = {'W','I','N','E','T','E','S','T','V','A','R','1','=','t','e','s','t',' ','o','k',0};
+    static const WCHAR result2[] = {'W','I','N','E','T','E','S','T','V','A','R','2','=','t','e','s','t',' ','o','k',0};
+    BOOL found1 = FALSE;
+    BOOL found2 = FALSE;
+    BOOL is_ready = setup_environment();
+    if (is_ready)
+    {
+        WCHAR *env = NtCurrentTeb()->Peb->ProcessParameters->Environment;
+        for (; *env; env += lstrlenW(env) + 1)
+        {
+            if (lstrcmpW(env, result1) == 0)
+                found1 = TRUE;
+            if (lstrcmpW(env, result2) == 0)
+                found2 = TRUE;
+        }
+        todo_wine
+        ok(found1, "Didn't find %s in the PEB environment variables\n", wine_dbgstr_w(result1));
+        ok(found2, "Didn't find %s in the PEB environment variables\n", wine_dbgstr_w(result2));
+    }
+    else
+    {
+        skip("Preparation finished. Restart when running windows, then rerun the test for the results.\n");
+    }
+}
+
 START_TEST(env)
 {
     HMODULE mod = GetModuleHandleA("ntdll.dll");
@@ -535,4 +588,8 @@ START_TEST(env)
     testSet();
     testExpand();
     test_process_params();
+    if (winetest_interactive)
+    {
+        test_peb_environment();
+    }
 }
--
2.21.0




More information about the wine-devel mailing list