Вопрос

У нас есть приложение 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 и номер функции) устройства для устройства для периферийных компонентов в драйвере, который является частью стека драйвера целевого устройства в виде функции, либо фильтра Водитель.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top