OVariável de ambiente %SystemRoot%contém o caminho para o diretório do Windows. (por exemplo c:\windows
)
SystemRoot
não está configurado em Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
, éautomaticamentedefinir.
Agora, normalmente no Windows 10, esse diretório tem a caixa C:\Windows
no disco NTFS.
Depois que um script test(*) quebrou, notamos:
- Com a mesma versão do sistema operacional Windows 10 (LTSC 1809 17763.3887)
- Algumas caixas usam
%SystemRoot% == C:\WINDOWS
(todas em maiúsculas, apesar do diretório no disco serC:\Windows
) - Algumas caixas usam
%SystemRoot% == C:\Windows
(caso de dir no disco) - Verificamos com o ProcessExplorer: A diferença de maiúsculas e minúsculas já está presente no bloco de ambiente do
wininit.exe
processo, portanto não é substituída em algum lugar.
P:
A base para o valor de SystemRoot
leitura é de alguma chave de registro específica?
O que poderia explicar essa diferença?
(*): Para ser claro, o teste foi interrompido de qualquer maneira - você não deve confiar no revestimento do caminho no Windows.
Responder1
Está definido no processo de inicialização. Não está definido no registro, porque o processo de inicialização do sistema operacional precisa saber onde encontrar os arquivos de registro (e outros arquivos do sistema operacional) antes de poder lê-los no registro.
https://learn.microsoft.com/en-us/windows-hardware/drivers/devtest/boot-options-in-windows
As opções de inicialização do Windows são armazenadas no armazenamento de dados de configuração de inicialização (BCD) em computadores baseados em BIOS e em 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
Em sistemas operacionais Windows mais antigos, provavelmente está em boot.ini