Как Windows устанавливает переменную %SystemRoot%?

Как Windows устанавливает переменную %SystemRoot%?

The%SystemRoot% переменная средысодержит путь к каталогу Windows. (например c:\windows)

SystemRootне настроен в Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment, онавтоматическинабор.

Обычно в Windows 10 этот каталог располагается C:\Windowsна диске NTFS.

После того, как скрипт test(*) дал сбой, мы заметили:

  • С той же версией ОС Windows 10 (LTSC 1809 17763.3887)
  • Некоторые ящики используют %SystemRoot% == C:\WINDOWS(все заглавные буквы, несмотря на то, что каталог на диске — C:\Windows)
  • Некоторые коробки используют %SystemRoot% == C:\Windows(в случае каталога на диске)
  • Мы перепроверили с помощью ProcessExplorer: разница в регистре уже присутствует в блоке окружения процесса wininit.exe, поэтому она нигде не переопределена.

В:

Является ли основой для значения SystemRootread какой-либо конкретный раздел реестра?

Чем можно объяснить эту разницу?


(*): Если говорить точнее, тест в любом случае оказался неработоспособным — не полагайтесь на регистр путей в Windows.

решение1

Он устанавливается в процессе загрузки. Он не устанавливается в реестре, поскольку процесс загрузки ОС должен знать, где найти файлы реестра (и другие файлы ОС), прежде чем он сможет прочитать их из реестра.

https://learn.microsoft.com/en-us/windows-hardware/drivers/devtest/boot-options-in-windows

Параметры загрузки Windows хранятся в хранилище данных конфигурации загрузки (BCD) на компьютерах с BIOS и EFI.

PS C:\> bcdedit.exe /enum | select-string "device|root"

device                  partition=\Device\HarddiskVolume1
device                  partition=C:
osdevice                partition=C:
systemroot              \WINDOWS

PS C:\> $env:systemroot
C:\WINDOWS

В старых ОС Windows это, вероятно, в boot.ini.

Связанный контент