We have a Windows application that can use multiple PCI adapters. These adapters all have external physical connections to other hardware or cables. Our software is configured to know what the physical connection on each card is connected to. Imagine audio software that supports multiple sound inputs and outputs. The audio software is configured to know that the microphone on adapter 1 is the lead singer, while the microphone on adapter 2 is the guitar.
As it happens, this software is often run on laptops with ExpressCard and/or PC Card adapters. As such, the user may routinely remove the adapters. Additionally, our customers may have many more adapters than fit in one laptop. So, you can imagine that someone installs adapters A (PC Card) and B (ExpressCard) in the laptop and configures our software. They now expect that the singer's mic is attached to the PC card adapter and the guitar mic is attached to the ExpressCard adapter. They then go back to the office, take the adapters out and put them in the pile with all the other adapters. The next day when they go to use the software they grab adapters C (PC Card) and D (ExpressCard). When they plug these cards in to the system we'd like to be able to know that adapter C is in the same spot as adapter A was and therefore is hooked up to the singer's mic and that D is in the same spot as B was and is therefore hooked up to the guitar.
Without this feature the user will have to reconfigure our software every time they change cards, which is not especially user friendly.
Is there any way to determine the location in the PCI chain of a hardware adapter in Windows? Is there any other way to accomplish this goal?
I'd like this to work on Windows XP and later. Note that we do control the hardware drivers, so we can make changes there if necessary.