2010-09-24 2 views
0

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

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

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

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

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

ответ

1

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

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

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

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

1

Я думаю, this KB article - это то, что вам нужно.

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

Смежные вопросы