У нас есть приложение 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 и более поздних версиях. Обратите внимание, что мы контролируем драйверы оборудования, поэтому мы можем вносить в них изменения при необходимости.