Como o Windows define a variável% SystemRoot%?

Como o Windows define a variável% SystemRoot%?

OVariável de ambiente %SystemRoot%contém o caminho para o diretório do Windows. (por exemplo c:\windows)

SystemRootnã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:\Windowsno 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 ser C:\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.exeprocesso, portanto não é substituída em algum lugar.

P:

A base para o valor de SystemRootleitura é 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

informação relacionada