https://git.reactos.org/?p=reactos.git;a=commitdiff;h=d4e38a630ff8e7ad6ec5409a9b25be3ae596e9dd
commit d4e38a630ff8e7ad6ec5409a9b25be3ae596e9dd Author: Mark Jansen <mark.jan...@reactos.org> AuthorDate: Sat Mar 12 15:10:05 2022 +0100 Commit: Mark Jansen <mark.jan...@reactos.org> CommitDate: Sat Apr 9 01:25:06 2022 +0200 [SYSSETUP] Add new Env section to unattend.inf This allows to add environment variables during unattended setup --- boot/bootdata/bootcd/unattend.inf | 5 +++++ dll/win32/syssetup/wizard.c | 47 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/boot/bootdata/bootcd/unattend.inf b/boot/bootdata/bootcd/unattend.inf index ce5593788e2..dcf98b732f4 100644 --- a/boot/bootdata/bootcd/unattend.inf +++ b/boot/bootdata/bootcd/unattend.inf @@ -74,3 +74,8 @@ ProductOption = 0 ; XResolution = 1440 ; YResolution = 900 ; VRefresh = 0 + +; enable this section to add environment variables +;[Env] +;WINETEST_PLATFORM=reactos + diff --git a/dll/win32/syssetup/wizard.c b/dll/win32/syssetup/wizard.c index 233b87aa184..75842349d3e 100644 --- a/dll/win32/syssetup/wizard.c +++ b/dll/win32/syssetup/wizard.c @@ -2831,6 +2831,53 @@ ProcessUnattendSection( } RegCloseKey(hKey); + + if (SetupFindFirstLineW(pSetupData->hSetupInf, + L"Env", + NULL, + &InfContext)) + { + if (RegCreateKeyExW( + HKEY_LOCAL_MACHINE, L"SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment", 0, NULL, + REG_OPTION_NON_VOLATILE, KEY_WRITE | KEY_READ, NULL, &hKey, NULL) != ERROR_SUCCESS) + { + DPRINT1("Error: failed to open HKLM\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment\n"); + return; + } + do + { + if (!SetupGetStringFieldW(&InfContext, + 0, + szName, + ARRAYSIZE(szName), + &LineLength)) + { + DPRINT1("Error: SetupGetStringField failed with %d\n", GetLastError()); + return; + } + + if (!SetupGetStringFieldW(&InfContext, + 1, + szValue, + ARRAYSIZE(szValue), + &LineLength)) + { + DPRINT1("Error: SetupGetStringField failed with %d\n", GetLastError()); + return; + } + DPRINT1("[ENV] %S=%S\n", szName, szValue); + + DWORD dwType = wcschr(szValue, '%') != NULL ? REG_EXPAND_SZ : REG_SZ; + + if (RegSetValueExW(hKey, szName, 0, dwType, (const BYTE*)szValue, (DWORD)(wcslen(szValue) + 1) * sizeof(TCHAR)) != ERROR_SUCCESS) + { + DPRINT1(" - Error %d\n", GetLastError()); + } + + } while (SetupFindNextLine(&InfContext, &InfContext)); + + RegCloseKey(hKey); + } } VOID