2010-09-24 45 views
0

Nous avons une application Windows qui peut utiliser plusieurs cartes PCI. Ces adaptateurs ont tous des connexions physiques externes à d'autres matériels ou câbles. Notre logiciel est configuré pour savoir à quoi la connexion physique de chaque carte est connectée. Imaginez un logiciel audio qui prend en charge plusieurs entrées et sorties audio. Le logiciel audio est configuré pour savoir que le microphone sur l'adaptateur 1 est le chanteur principal, tandis que le microphone sur l'adaptateur 2 est la guitare.Déterminer l'emplacement physique d'une carte PCI

En fait, ce logiciel est souvent exécuté sur des ordinateurs portables avec des cartes ExpressCard et/ou cartes PC. En tant que tel, l'utilisateur peut régulièrement supprimer les adaptateurs. De plus, nos clients peuvent avoir beaucoup plus d'adaptateurs que ne le ferait un ordinateur portable. Ainsi, vous pouvez imaginer que quelqu'un installe les adaptateurs A (PC Card) et B (ExpressCard) dans l'ordinateur portable et configure notre logiciel. Ils s'attendent maintenant à ce que le micro du chanteur soit attaché à l'adaptateur de carte PC et le micro de la guitare est attaché à l'adaptateur ExpressCard. Ils retournent ensuite au bureau, sortent les adaptateurs et les mettent dans la pile avec tous les autres adaptateurs. Le lendemain, lorsqu'ils utilisent le logiciel, ils prennent les adaptateurs C (PC Card) et D (ExpressCard). Quand ils branchent ces cartes au système, nous aimerions savoir que l'adaptateur C est au même endroit que l'adaptateur A et qu'il est donc relié au micro du chanteur et que D se trouve au même endroit que B et est donc branché à la guitare.

Sans cette fonctionnalité, l'utilisateur devra reconfigurer son logiciel chaque fois qu'il change de carte, ce qui n'est pas particulièrement facile à utiliser.

Est-il possible de déterminer l'emplacement dans la chaîne PCI d'une carte matérielle dans Windows? Y a-t-il un autre moyen d'atteindre cet objectif?

Je voudrais que cela fonctionne sur Windows XP et plus tard. Notez que nous contrôlons les pilotes matériels, nous pouvons donc y apporter des modifications si nécessaire.

Répondre

1

Comme il se trouve, des informations de localisation PCI est disponible sous

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

Où pour les périphériques PCI est quelque chose comme PCI \\

Sous Windows XP, il vous dira le numéro de bus, périphérique Numéro et numéro de fonction. C'est probablement la même information de http://support.microsoft.com/kb/253232 comme mentionné par Steve. L'avantage de l'utilisation de cet emplacement de registre est que les modifications du pilote (y compris les modifications de l'API) ne sont pas nécessaires.

1

Je pense que this KB article est ce dont vous avez besoin.

Cet article décrit comment vous pouvez obtenir la configuration et l'emplacement informations (telles que BusNumber, DeviceNumber, et le numéro de fonction) de un dispositif d'interconnexion (PCI) Peripheral Component dans un pilote qui fait partie de la pile de pilotes du périphérique cible en tant que fonction ou pilote de filtre.