Comment les systèmes d'exploitation basés sur Windows NT adressent-ils les périphériques?

9

Je suis confondu avec la notation comme

multi (0) disque (0) rdisk (0) partition (1) \ ...

et

\ Device \ HardDisk1 \ DR1
\ Device \ Video0

Je vois ces adresses uniquement dans le contexte des systèmes d'exploitation Windows NT tels que Windows XP et Windows 7. Que signifient ces adresses et comment sont-elles utilisées pour faire référence à des périphériques tels que les disques durs, les adaptateurs graphiques, les périphériques d'interface utilisateur (claviers) , souris, etc.), adaptateurs réseau et autre matériel?

bwDraco
la source
Où et comment comptez-vous vous y référer?
KCotreau
Parfois, je reçois des messages qui font référence à des appareils utilisant ces noms. Ce que je veux comprendre, c'est ce que ces adresses signifient, comment les autres appareils sont adressés à l'aide de ces notations, et comment cela peut être utilisé par les applications pour accéder directement au matériel (si possible).
bwDraco
Linux utilise des /devnœuds pour permettre un accès direct au matériel. Ce que je veux comprendre, c'est ce qui ressemble à un mécanisme similaire pour adresser et accéder au matériel sous Windows.
bwDraco
Depuis Windows NT, à ma connaissance, Windows ne vous permet pas d'accéder directement au matériel. C'est ainsi qu'il se protège. Avec Windows 95/98 / ME, n'importe quel programmeur le pouvait et cela leur permettait de rendre le système d'exploitation instable. La solution était de tout faire passer par le noyau, et de le laisser décider s'il était sûr de s'exécuter. Sinon, il pourrait lancer une erreur, mais se protéger contre une mauvaise programmation ... au moins dans une plus grande mesure.
KCotreau
@KCotreau: C'est vrai, mais non pertinent. Vous devez maintenant demander au noyau. Mais si les disques durs n'avaient pas de noms comme ceux-ci, vous ne pourriez pas du tout demander au noyau. Il ne saurait pas de quel disque dur vous parlez.
MSalters

Réponses:

9

Contrairement à la croyance populaire, le noyau Windows possède un système de fichiers enraciné ("fichier"). Dans * nix, la racine est /, et dans Windows, c'est \. Cependant, le sous-système Win32 ne l'expose pas. Vous pouvez l'explorer avec WinObj .

Quelques noms de périphériques NT (peut-être familiers) ( Met ne Nsont que des entiers):

  • \Device\HarddiskM\DRN: Disques
  • \Device\HarddiskVolumeN: Cloisons
  • \Device\CdRomN: Lecteurs de disques optiques
  • \Device\KeyboardClassN: Claviers
  • \Device\MountPointManager: Pas un appareil, mais garde une trace des périphériques de stockage
  • \Device\Null: Mange des données et génère des valeurs nulles (zéros)

\Device\HardDisk1\DR1est le vrai nom du disque pour Windows , et multi(0)disk(0)rdisk(0)partition(1)est hérité - cela n'a rien à voir avec la façon dont Windows se réfère aux périphériques, mais comment le chargeur de démarrage fait référence au disque. Comment cela fonctionne, je n'en ai aucune idée ( cette page en explique certaines parties ), mais ce n'est pas vraiment quelque chose que Windows se préoccupe après le démarrage.

Les versions plus récentes de Windows utilisent les données de configuration de démarrage (BCD), qui est un fichier nommé BCDdont le format est similaire à celui du Registre, au lieu de Boot.ini. Il utilise généralement des identificateurs uniques (GUID) pour faire référence aux volumes au lieu des lettres de lecteur ou des chemins d'accès au système de fichiers, et c'est ce que les nouvelles versions de Windows utilisent.

user541686
la source
Qu'en est-il du matériel autre que les périphériques de stockage (tels que \Device\Video0)?
bwDraco
@DragonLord: ... qu'en est-il? Pas sûr de ce que vous voulez dire.
user541686
Quels noms sont utilisés pour faire référence aux claviers, souris, adaptateurs réseau et autres périphériques?
bwDraco
@DragonLord: Bon point, je vais ajouter cela. Je me suis concentré uniquement sur le chargement de démarrage, je n'ai pas remarqué que la question était plus générale.
user541686
Le "système de fichiers enraciné" que vous avez mentionné est appelé l' espace de noms du gestionnaire d'objets . J'ai trouvé cela après avoir cliqué sur le lien WinObj et fait des recherches. C'est assez fascinant de voir comment Windows NT fonctionne à l'intérieur ...
bwDraco
1

La première ligne, rendue obsolète par le BCD (Boot Configuration Data Store) dans Windows Vista, Windows 7 et Server 2008, provient d'un fichier boot.ini pour Windows XP ou Server 2003 et se trouve dans le répertoire racine du lecteur système. Cela indique à Windows où aller (quel disque et quelle partition) pour trouver les fichiers système dont il a besoin pour démarrer.

Regardez ici pour une explication détaillée de "multi" et "rdisk". Le reste signifie que regardez le disque 0 (ils commencent à 0 et montent à partir de là, et vous pouvez voir leurs numéros dans le gestionnaire de disques), partition 1 (contrairement aux disques, ceux-ci commencent à être numérotés à 1 et montent).

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

En ce qui concerne l'énumération des appareils, c'est un sujet de programmation très compliqué, qui est expliqué ici si vous voulez que votre tête explose. Le format que vous avez indiqué correspond à la manière dont l'appareil est traité en tant qu'ID matériel dans le registre.

En pratique, vous pouvez consulter cette clé de registre

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Enum

pour faire correspondre toute erreur, vous pouvez obtenir une valeur "ID matériel" dans l'une des sous-clés pour déterminer exactement à quel périphérique l'erreur peut se référer.

KCotreau
la source
1
La section 4.2.7 de la spécification informatique avancée RISC , republiée ici par la NetBSD Foundation , nous explique tout sur les chemins ARC.
JdeBP