Pregunta

Tenemos una aplicación de Windows que puede utilizar varios adaptadores PCI. Estos adaptadores todos tienen conexiones físicas externas a otro hardware o cables. Nuestro software está configurado para saber cuál es la conexión física en cada tarjeta está conectado. Imagínese software de audio que soporta múltiples entradas y salidas de sonido. El software de audio está configurado para saber que el micrófono en el adaptador 1 es el cantante, mientras que el micrófono en el adaptador 2 es la guitarra.

Da la casualidad que este software es a menudo se ejecutan en los ordenadores portátiles con ExpressCard y / o adaptadores para tarjetas PC. Como tal, el usuario puede retirar de manera rutinaria los adaptadores. Además, nuestros clientes pueden tener muchos más adaptadores de las que caben en un ordenador portátil. Por lo tanto, se puede imaginar que alguien Instala adaptadores A (PC Card) y B (ExpressCard) en el ordenador portátil y configura nuestro software. Ahora esperan que micrófono del cantante se une al adaptador de tarjeta de PC y el micrófono guitarra está conectado al adaptador ExpressCard. A continuación, se remontan a la oficina, llevan a cabo los adaptadores y los pusieron en la pila con todos los otros adaptadores. Al día siguiente, cuando se van a utilizar el software agarran adaptadores C (PC Card) y D (ExpressCard). Cuando se conectan estas tarjetas en el sistema que nos gustaría ser capaz de saber que el adaptador de C está en el mismo lugar que el adaptador A era y por lo tanto es de hasta enganchado a la cantante del micrófono y que D está en el mismo lugar que B era y por lo tanto está conectado a la guitarra.

Sin esta característica, el usuario tendrá que volver a configurar nuestro software cada vez que cambian las tarjetas, lo cual no es especialmente fácil de usar.

¿Hay alguna manera de determinar la ubicación en la cadena de PCI de un adaptador de hardware en Windows? ¿Hay alguna otra manera de lograr este objetivo?

Me gustaría que esto funcione en Windows XP y versiones posteriores. Tenga en cuenta que hacemos controlar los controladores de hardware, por lo que podemos hacer cambios allí si es necesario.

¿Fue útil?

Solución

Como resultado, la información de ubicación PCI está disponible bajo

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

Cuando los dispositivos PCI es algo así como PCI \\

En Windows XP este le dirá el número de bus, número de dispositivo y la función de número. Esta es probablemente la misma información de http://support.microsoft.com/kb/253232 como mencionado por Steve. La ventaja de usar esta ubicación del registro es que las modificaciones de los controladores (incluyendo cambios en la API) no son necesarios.

Otros consejos

este artículo KB es lo que necesita.

En este artículo se describe cómo puede obtener la configuración y ubicación información (como BusNumber, DeviceNumber, y la función de número) de Interconexión de componentes periféricos de una (PCI) del dispositivo en un controlador que es parte de pila del controlador del dispositivo de destino ya sea como un controlador de función o el filtro.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top