Определить физическое расположение адаптера PCI
-
05-10-2019 - |
Вопрос
У нас есть приложение Windows, которое может использовать несколько адаптеров PCI. Все адаптеры имеют внешние физические соединения с другими аппаратными или кабелями. Наше программное обеспечение настроено, чтобы знать, к чему подключена физическое соединение на каждой карте. Представьте себе аудио программное обеспечение, которое поддерживает несколько звуковых входов и выходов. Аудио программное обеспечение настроен на том, чтобы знать, что микрофон на адаптете 1 является певцом свинца, а микрофон на адаптере 2 - гитара.
Как это происходит, это программное обеспечение часто работает на ноутбуках с адаптаторами ExpressCard и / или PC. Таким образом, пользователь может регулярно удалить адаптеры. Кроме того, наши клиенты могут иметь много других адаптеров, чем в соответствии с одним ноутбуком. Итак, вы можете себе представить, что кто-то устанавливает адаптеры A (PC Card) и B (ExpressCard) на ноутбуке и настраивают наше программное обеспечение. Теперь они ожидают, что микрофон певицы прикреплен к адаптеру карт ПК, и гитарный микрофон прикреплен к адаптеру ExpressCard. Затем они возвращаются в офис, возьмите адаптеры и поставьте их в кучу со всеми другими адаптерами. На следующий день, когда они собираются использовать программное обеспечение, они захватывают адаптеры C (PC Card) и D (ExpressCard). Когда они подключают эти карты к системе, мы хотели бы, чтобы иметь возможность узнать, что адаптер C находится в том же месте, что и адаптер A, и, следовательно, подключен к микрофонному микрофону и что D находится в том же месте, что и B И поэтому подключен к гитаре.
Без этой функции пользователю придется перенаковывать наше программное обеспечение каждый раз, когда они меняют карты, что не особенно удобно для пользователя.
Есть ли способ определить местоположение в цепочке PCI аппаратного адаптера в Windows? Есть ли другой способ достичь этой цели?
Я бы хотел, чтобы это работать на Windows XP и позже. Обратите внимание, что мы управляем аппаратными драйверами, поэтому мы можем внести изменения там при необходимости.
Решение
Как оказалось, информация о местоположении PCI доступна под
HKLM\SYSTEM\CurrentControlSet\Enum\<PnP ID>\LocationInformation
Где для устройств PCI что-то вроде PCI
Под Windows XP это скажет вам номер шины, номер устройства и номер функции. Это, вероятно, та же информация от http://support.microsoft.com/kb/253232. Как упомянуто Стив. Преимущество использования этого местоположения реестра заключается в том, что модификации драйверов (включая изменения API) не нужны.
Другие советы
я думаю Эта статья КБ это то, что вам нужно.
В этой статье описывается, как вы можете получить информацию о конфигурации и местоположении (например, busnumber, DeviceNumber и номер функции) устройства для устройства для периферийных компонентов в драйвере, который является частью стека драйвера целевого устройства в виде функции, либо фильтра Водитель.