Windows は %SystemRoot% 変数をどのように設定しますか?

Windows は %SystemRoot% 変数をどのように設定しますか?

%SystemRoot% 環境変数Windows ディレクトリへのパスが含まれます。(例c:\windows)

SystemRootに設定されていない場合Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environmentは、自動的にセット。

現在、Windows 10 では通常、このディレクトリはC:\WindowsNTFS ディスク上で大文字と小文字が区別されます。

スクリプト テスト(*) が壊れた後、次のことに気付きました:

  • 同じOSバージョン Windows 10 (LTSC 1809 17763.3887)
  • 一部のボックスでは、%SystemRoot% == C:\WINDOWS(ディスク上のディレクトリが であるにもかかわらず、すべて大文字C:\Windows)を使用します。
  • 一部のボックスでは%SystemRoot% == C:\Windows(ディスク上のディレクトリの場合)を使用します
  • ProcessExplorer でクロスチェックしたところ、大文字と小文字の違いはプロセスの環境ブロックにすでに存在しているためwininit.exe、どこかで上書きされていません。

質問:

読み取り値のベースはSystemRoot特定のレジストリ キーから取得されますか?

この違いを説明できるものは何でしょうか?


(*): 明確に言うと、テストはとにかく壊れていました - Windows ではパスの大文字と小文字の区別に依存してはいけません。

答え1

これはブート プロセスで設定されます。レジストリでは設定されません。OS ブート プロセスは、レジストリからレジストリ ファイル (およびその他の OS ファイル) を読み取る前に、それらの場所を知る必要があるためです。

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

Windows ブート オプションは、BIOS ベースおよび EFI ベースのコンピューターのブート構成データ (BCD) ストアに保存されます。

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 OSでは、おそらくboot.iniにあります

関連情報