Como os sistemas operacionais baseados no Windows NT lidam com dispositivos?

9

Estou confuso com notação como

multi (0) disco (0) rdisk (0) partição (1) \ ...

e

\ Device \ HardDisk1 \ DR1
\ Device \ Video0

Eu vejo esses endereços apenas no contexto de sistemas operacionais baseados no Windows NT, como Windows XP e Windows 7. O que esses endereços significam e como eles são usados ​​para se referir a dispositivos como discos rígidos, adaptadores gráficos, dispositivos de interface humana (teclados , mouse, etc.), adaptadores de rede e outro hardware?

bwDraco
fonte
Onde e como você planeja se referir a eles?
KCotreau
Às vezes, recebo mensagens que se referem a dispositivos usando esses nomes. O que eu quero entender é o que esses endereços significam, como outros dispositivos são endereçados usando essas notações e como isso pode ser usado pelos aplicativos para acessar o hardware diretamente (se possível).
bwDraco
O Linux usa /devnós para permitir acesso direto ao hardware. O que eu quero entender é o que parece ser um mecanismo semelhante para endereçar e acessar o hardware no Windows.
bwDraco
Desde o Windows NT, que eu saiba, o Windows não permite que você acesse diretamente o hardware. É assim que se protege. Com o Windows 95/98 / ME, qualquer programador podia, e isso permitia que eles tornassem o sistema operacional instável. A solução foi fazer tudo passar pelo kernel e deixá-lo decidir se era seguro executá-lo. Caso contrário, poderia gerar um erro, mas se proteger de uma programação ruim ... pelo menos em maior grau.
KCotreau
@KCotreau: Isso é verdade, mas irrelevante. Agora você precisa perguntar ao kernel. Mas se os discos rígidos não tivessem nomes como esses, você não poderia perguntar ao kernel. Não saberia de que disco rígido você está falando.
MSalters

Respostas:

9

Ao contrário da crença popular, o kernel do Windows não tem um arquivo enraizado sistema ( "file"). No * nix, a raiz é /e no Windows é \. O subsistema Win32 não o expõe, no entanto. Você pode explorá-lo com o WinObj .

Alguns nomes de dispositivos NT (possivelmente familiares) ( Me Nsão apenas números inteiros):

  • \Device\HarddiskM\DRN: Discos
  • \Device\HarddiskVolumeN: Partições
  • \Device\CdRomN: Unidades de disco óptico
  • \Device\KeyboardClassN: Teclados
  • \Device\MountPointManager: Não é um dispositivo, mas mantém o controle de dispositivos de armazenamento
  • \Device\Null: Consome dados e gera nulos (zeros)

\Device\HardDisk1\DR1é o nome verdadeiro do disco para o Windows e multi(0)disk(0)rdisk(0)partition(1)é legado - não tem nada a ver com a maneira como o Windows se refere aos dispositivos, mas como o carregador de inicialização se refere ao disco. Como funciona, não faço ideia ( esta página explica partes dela ), mas não é realmente algo com que o Windows se preocupe depois que inicia a inicialização.

As versões mais recentes do Windows usam o BCD (Boot Configuration Data), que é um arquivo BCDcujo formato é semelhante ao do registro, em vez de Boot.ini. Geralmente, ele usa identificadores exclusivos (GUIDs) para se referir a volumes, em vez de letras de unidade ou caminhos do sistema de arquivos, e é o que as versões mais recentes do Windows usam.

user541686
fonte
E quanto a hardware que não seja dispositivos de armazenamento (como \Device\Video0)?
precisa saber é o seguinte
@DragonLord: ... e quanto a isso? Não tenho certeza do que você quer dizer.
user541686
Quais nomes são usados ​​para se referir a teclados, mouses, adaptadores de rede e outros dispositivos?
bwDraco
@DragonLord: Bom ponto, vou acrescentar isso. Eu apenas me concentrei no carregamento de inicialização, não percebi que a pergunta era mais geral.
user541686
O "sistema de arquivos raiz" que você mencionou é chamado de namespace do Gerenciador de Objetos . Encontrei isso depois de clicar no link WinObj e fazer algumas pesquisas. É muito intrigante como Windows NT funciona no interior ...
bwDraco
1

A primeira linha, que ficou obsoleta pelo BCD (armazenamento de dados de configuração de inicialização) no Windows Vista, Windows 7 e Server 2008, é de um arquivo boot.ini para Windows XP ou Server 2003 e está localizada no diretório raiz da unidade do sistema. Isso indica ao Windows para onde ir (que disco e partição) para encontrar os arquivos do sistema necessários para inicializar.

Procure aqui uma explicação detalhada de "multi" e "rdisk". O resto significa que olhe para o disco 0 (eles começam em 0 e avançam a partir daí, e você pode ver seus números no gerenciador de discos), partição 1 (ao contrário dos discos, estes começam a ser numerados em 1 e aumentam).

http://support.microsoft.com/kb/102873

No que diz respeito à enumeração de dispositivos, é um assunto de programação muito complicado, que é explicado aqui se você deseja que sua cabeça exploda. O formato que você forneceu é como o dispositivo é endereçado como uma ID de hardware no registro.

Por uma questão prática, você pode olhar para essa chave do registro

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Enum

para corresponder a qualquer erro, você pode obter um valor de "ID de hardware" em uma das subchaves para determinar exatamente a qual dispositivo o erro pode se referir.

KCotreau
fonte
11
A seção 4.2.7 da Advanced RISC Computing Specification , republicada aqui pela NetBSD Foundation , conta tudo sobre os caminhos do ARC.
JdeBP