Как операционные системы на базе Windows NT обращаются к устройствам?

9

Я запутался с обозначениями, как

мульти (0) диск (0) RDISK (0) раздел (1) \ ...

а также

\ Device \ Harddisk1 \ DR1
\ Device \ video0

Я вижу эти адреса только в контексте операционных систем на базе Windows NT, таких как Windows XP и Windows 7. Что означают эти адреса и как они используются для обозначения таких устройств, как жесткие диски, графические адаптеры, устройства интерфейса пользователя (клавиатуры) , мыши и т. д.), сетевые адаптеры и другое оборудование?

bwDraco
источник
Где и как вы планируете обращаться к ним?
Котро
Иногда я получаю сообщения, которые ссылаются на устройства, использующие эти имена. Я хочу понять, что означают эти адреса, как другие устройства адресуются с использованием этих обозначений и как они могут использоваться приложениями для прямого доступа к оборудованию (если это возможно).
bwDraco
Linux использует /devузлы для прямого доступа к оборудованию. Что я хочу понять, так это то, что похоже на аналогичный механизм адресации и доступа к оборудованию в Windows.
bwDraco
Поскольку Windows NT, насколько мне известно, Windows не позволяет вам иметь прямой доступ к оборудованию. Вот как это защищает себя. С Windows 95/98 / ME любой программист мог, и это позволило им сделать ОС нестабильной. Решение состояло в том, чтобы заставить все пройти через ядро, и позволить ему решить, было ли это безопасно выполнить. Если нет, это может привести к ошибке, но защитить себя от плохого программирования ... по крайней мере, в большей степени.
Котро
@KCotreau: это правда, но не имеет значения. Теперь вы должны спросить ядро. Но если у жестких дисков не было таких имен, вы вообще не могли бы спросить ядро. Не знаю, о каком жестком диске ты говоришь.
MSalters

Ответы:

9

Вопреки распространенному мнению, ядро Windows , действительно имеют корневой системы ( «Файл») файл. В * nix рут есть /, а в Windows это \. Подсистема Win32, однако, не раскрывает ее. Вы можете изучить это с WinObj .

Некоторые (возможно знакомые) имена устройств NT ( Mи Nпросто целые числа):

  • \Device\HarddiskM\DRN: Диски
  • \Device\HarddiskVolumeN: Разделы
  • \Device\CdRomN: Оптические дисководы
  • \Device\KeyboardClassN: Клавиатуры
  • \Device\MountPointManager: Не устройство, но отслеживает устройства хранения
  • \Device\Null: Съедает данные и выводит нули (нули)

\Device\HardDisk1\DR1является истинным именем диска для Windows и multi(0)disk(0)rdisk(0)partition(1)является устаревшим - оно не имеет ничего общего с тем, как Windows относится к устройствам, а с тем, как загрузчик ссылается на диск. Как это работает, я понятия не имею ( эта страница объясняет некоторые его части ), но это не совсем то, чем занимается Windows после загрузки.

Более новые версии Windows используют данные конфигурации загрузки (BCD), то есть файл с именем BCD, формат которого похож на формат реестра, а не Boot.ini. Обычно он использует уникальные идентификаторы (GUID) для ссылки на тома, а не на буквы дисков или пути файловой системы, и это то, что используют более новые версии Windows.

user541686
источник
Что насчет аппаратного обеспечения, отличного от запоминающих устройств (таких как \Device\Video0)?
bwDraco
@DragonLord: ... как насчет этого? Не уверен, что вы имеете в виду.
user541686
Какие имена используются для обозначения клавиатур, мышей, сетевых адаптеров и других устройств?
bwDraco
@DragonLord: Хорошо, я добавлю это. Я просто сосредоточился на загрузке, не заметил, что вопрос был более общим.
user541686
Упомянутая вами «корневая файловая система» называется пространством имен диспетчера объектов . Я нашел это после перехода по ссылке WinObj и проведения некоторых исследований. Это довольно интригующе, как Windows NT работает внутри ...
bwDraco
1

Первая строка, которая была устаревшей с помощью BCD (хранилища данных конфигурации загрузки) в Windows Vista, Windows 7 и Server 2008, взята из файла boot.ini для Windows XP или Server 2003 и находится в корневом каталоге. системного диска. Это говорит Windows, куда идти (какой диск и раздел), чтобы найти системные файлы, необходимые для загрузки.

Смотрите здесь для подробного объяснения "multi" и "rdisk". Остальное означает, что посмотрите на диск 0 (они начинаются с 0 и идут вверх оттуда, и вы можете увидеть их номера в диспетчере дисков), раздел 1 (в отличие от дисков, они начинают нумероваться с 1 и увеличиваться).

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

Что касается перечисления устройств, это очень сложный предмет программирования, который объясняется здесь, если вы хотите, чтобы ваша голова взорвалась. Формат, который вы указали, - это то, как устройство рассматривается как идентификатор оборудования в реестре.

С практической точки зрения вы можете посмотреть на этот раздел реестра

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Enum

чтобы соответствовать любой ошибке, вы можете получить значение идентификатора оборудования в одном из подразделов, чтобы точно определить, к какому устройству может относиться ошибка.

KCotreau
источник
1
Раздел 4.2.7 Расширенной спецификации RISC-вычислений , опубликованный здесь NetBSD Foundation , рассказывает все о путях ARC.
JdeBP