の%SystemRoot% 環境変数Windows ディレクトリへのパスが含まれます。(例c:\windows
)
SystemRoot
に設定されていない場合Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
は、自動的にセット。
現在、Windows 10 では通常、このディレクトリはC:\Windows
NTFS ディスク上で大文字と小文字が区別されます。
スクリプト テスト(*) が壊れた後、次のことに気付きました:
- 同じ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にあります