Диспетчер устройств Windows и идентификаторы оборудования - PullRequest
0 голосов
/ 09 мая 2009

Мне любопытно, как диспетчер устройств Windows получает идентификаторы оборудования для устройства, даже если для устройства еще не загружен драйвер устройства. Кто-нибудь знает, как Windows работает по этому поводу?

В связи с этим я заинтересован в поддержке языковой локализации для программного обеспечения, которое мы пишем; Возможно ли, чтобы устройство и / или драйвер сообщали свое понятное имя и описание локализованным способом? Есть ли уже распространенная практика для этого?

Спасибо за ваше время.

Ответы [ 4 ]

5 голосов
/ 28 июня 2009

Во-первых, чтобы понять порядок загрузки драйверов, рекомендуется переключить диспетчер устройств на Просмотр | Устройства в режиме подключения .

Как вы могли заметить, устройства расположены под драйвером шины. Для устройств PCI это будет «шина PCI». Для USB-устройств это будет их USB-концентратор. У каждого драйвера шины есть свое представление о том, как должны быть отформатированы строки идентификаторов:

  • Идентификатор экземпляра устройства
  • Аппаратные идентификаторы
  • Совместимые идентификаторы
  • Местоположение и т. Д.

Возвращает их в ответ на IRP_MN_QUERY_ID (BusQueryInstanceID, BusQueryHardwareIDs, BusQueryCompatibleIDs) и IRP_MN_QUERY_DEVICE_TEXT (DeviceTextDescription, DeviceTextLocationInformation и т. Д.)

Конечно, поскольку драйвер шины перечислял устройства (т.е. создавал дочерние устройства, которые вы видите) в первую очередь (через любой стандартный интерфейс, подходящий для шины, например, «Получить дескриптор устройства / строки» на USB), он знает идентификатор поставщика, идентификатор продукта и т. д.

Драйвер устройства в данный момент загружать не нужно. На самом деле, он не может быть загружен. Идентификаторы устройства - это именно то, что указывает системе PnP, какой драйвер соответствует устройству.

Что касается локализации:

В отличие от IRP_MN_QUERY_ID, который предоставляет непрозрачные строки, предназначенные для сопоставления устройств, информация IRP_MN_QUERY_DEVICE_TEXT действительно предназначалась для локализации. Для этого вы получаете запрошенный идентификатор локали (LCID) во входных данных (Parameters.QueryDeviceText.LocaleId).

[Как отметил Alphaneo, драйвер концентратора USB может передавать этот LCID на устройство USB (в рамках запроса Get String Descriptor), надеясь, что само устройство USB имеет локализованные строки.]

1 голос
/ 07 января 2011

Обратите внимание, что существует разница между идентификатором оборудования / серийным номером и истинным уникальным идентификатором оборудования. Может быть, это объяснит это лучше: http://www.soft.tahionic.com/download-hdd_id/hardware%20ID%20programmer%27s%20DLL.html

1 голос
/ 11 мая 2009

Идентификатор устройства, представляет собой комбинацию информации, получаемой от устройства. Например, для устройства USB строка основана на VID и PID (идентификатор поставщика и идентификатор продукта). Теперь это не может произойти, если драйвер не загружен. По крайней мере, какой-то драйвер, драйвер шины должен быть загружен для ОС, чтобы получить идентификатор устройства.

Теперь, для языковой поддержки, я думаю, что для драйвера WDM, есть QUERY_LANG или что-то, я не помню правильно, в качестве альтернативы, некоторые устройства, такие как USB, имеют поддержку ID языка. Этот идентификатор языка определяет язык строки дескриптора продукта.

1 голос
/ 09 мая 2009

Процесс верхнего уровня называется перечислением. Большинство современных шин устройств поддерживают механизм, который позволяет ОС запрашивать шину и определять, какие устройства подключены к шине.

Все семейства шин PCI поддерживают перечисление. Шина PCI имеет специальное перечислительное пространство только для этого. Отсюда и идентификатор «Plug-n-Play».

Идентификатор устройства однозначно идентифицирует устройство на шине и позволяет ОС найти правильный драйвер для этого устройства.

Другие шины, включая USB и FireWire, имеют стратегии перечисления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...