Определите физическое местоположение адаптера PCI - PullRequest
0 голосов
/ 24 сентября 2010

У нас есть приложение Windows, которое может использовать несколько адаптеров PCI. Все эти адаптеры имеют внешние физические соединения с другим оборудованием или кабелями. Наше программное обеспечение настроено на то, чтобы знать, к чему подключено физическое соединение на каждой карте. Представьте себе аудио программное обеспечение, которое поддерживает несколько звуковых входов и выходов. Звуковое программное обеспечение сконфигурировано так, чтобы знать, что микрофон на адаптере 1 - это вокалист, а микрофон на адаптере 2 - это гитара.

Как оказалось, это программное обеспечение часто запускается на ноутбуках с адаптерами ExpressCard и / или PC Card. Таким образом, пользователь может регулярно удалять адаптеры. Кроме того, у наших клиентов может быть гораздо больше адаптеров, чем умещается в одном ноутбуке. Итак, вы можете себе представить, что кто-то устанавливает адаптеры A (PC Card) и B (ExpressCard) в ноутбук и настраивает наше программное обеспечение. Теперь они ожидают, что микрофон певца подключен к адаптеру PC-карты, а микрофон гитары подключен к адаптеру ExpressCard. Затем они возвращаются в офис, достают адаптеры и складывают их вместе со всеми остальными адаптерами. На следующий день, когда они используют программное обеспечение, они берут адаптеры C (PC Card) и D (ExpressCard). Когда они подключают эти карты к системе, мы хотели бы знать, что адаптер C находится в том же месте, что и адаптер A, и поэтому подключен к микрофону певца, а D находится в том же месте, что и B и поэтому подключен к гитаре.

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

Есть ли способ определить местоположение в цепи PCI аппаратного адаптера в Windows? Есть ли другой способ достичь этой цели?

Я бы хотел, чтобы это работало в Windows XP и более поздних версиях. Обратите внимание, что мы контролируем драйверы оборудования, поэтому мы можем вносить в них изменения при необходимости.

Ответы [ 2 ]

1 голос
/ 04 октября 2010

Как выясняется, информация о расположении PCI доступна в

HKLM\SYSTEM\CurrentControlSet\Enum\<PnP ID>\LocationInformation

Где для устройств PCI это что-то вроде PCI \\

В Windows XP вам сообщат номер шиныНомер устройства и номер функции.Скорее всего, это та же информация из http://support.microsoft.com/kb/253232, что упоминала Стив.Преимущество использования этого расположения реестра состоит в том, что модификации драйверов (включая изменения API) не требуются.

1 голос
/ 24 сентября 2010

Я думаю эта статья в КБ - это то, что вам нужно.

В этой статье описывается, как вы можете получить конфигурация и местоположение информация (например, BusNumber, DeviceNumber и номер функции) из периферийное компонентное соединение (PCI) устройство в драйвере, который является частью стека драйверов целевого устройства либо как функция, либо как драйвер фильтра.

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