确定PCI适配器的物理位置

时间:2010-09-24 13:08:40

标签: winapi windows-xp driver wdk pci-bus

我们有一个可以使用多个PCI适配器的Windows应用程序。这些适配器都具有与其他硬件或电缆的外部物理连接。我们的软件配置为知道每张卡上的物理连接是什么。想象一下支持多种声音输入和输出的音频软件。音频软件配置为知道适配器1上的麦克风是主唱,而适配器2上的麦克风是吉他。

实际上,该软件通常在带有ExpressCard和/或PC卡适配器的笔记本电脑上运行。这样,用户可以例行地移除适配器。此外,我们的客户可能拥有比一台笔记本电脑更多的适配器。因此,您可以想象有人在笔记本电脑中安装适配器A(PC卡)和B(ExpressCard)并配置我们的软件。他们现在希望歌手的麦克风连接到PC卡适配器,吉他麦克风连接到ExpressCard适配器。然后他们回到办公室,拿出适配器并将它们与所有其他适配器放在一起。第二天,当他们去使用软件时,他们会使用适配器C(PC卡)和D(ExpressCard)。当他们将这些卡插入系统时,我们希望能够知道适配器C与适配器A位于同一位置,因此连接到歌手的麦克风,并且D与B位于同一位置。因此,它与吉他相连。

如果没有此功能,用户每次更换卡片时都必须重新配置我们的软件,这对用户来说并不是特别友好。

有没有办法确定Windows中硬件适配器的PCI链中的位置?还有其他方法可以实现这个目标吗?

我希望这可以在Windows XP及更高版本上运行。请注意,我们会控制硬件驱动程序,因此我们可以在必要时进行更改。

2 个答案:

答案 0 :(得分:1)

我认为this KB article就是您所需要的。

  

本文介绍了如何获取   配置和位置   信息(例如BusNumber,   DeviceNumber和Function Number)   外围组件互连   (PCI)设备是驱动程序的一部分   目标设备的驱动程序堆栈   作为函数或过滤器驱动程序。

答案 1 :(得分:1)

事实证明,PCI位置信息可在

下找到
HKLM\SYSTEM\CurrentControlSet\Enum\<PnP ID>\LocationInformation

PCI设备的位置类似于PCI \\

在Windows XP下,这将告诉您总线编号,设备编号和功能编号。这可能与史蒂夫提到的http://support.microsoft.com/kb/253232相同。使用此注册表位置的优点是不需要驱动程序修改(包括API更改)。