将N插播设备映射到PCI插槽ID,C#

时间:2017-01-24 18:57:15

标签: c# hardware

我有一定数量的外部设备,让我们称之为东西。 每个Thing通过插入PCI插槽的PnP卡与计算机连接。 每张卡都有4个端口。 我需要获得每个Thing的UID,并且在重新启动之间保持一致。 请注意,Things没有我可以访问的内置UID。

我解决这个问题的想法是为卡上的每个端口获取一个UID。在我看来,我只需要弄清楚每个插卡插入哪个PCI插槽。这不会在重新启动时发生变化,当然端口将按照相同的顺序...所以我基本上可以用UID标记每个端口,并知道每个与之关联的UID。

我已经做了一些搜索,以找出最常用的C#对象。我找到的最接近的是ManagementObjectSearcher库中的System.Management对象。这是我写的一些简单的代码,看看这是否能让我得到我想要的东西:

static void Main(string[] args)
{
    IDsearch();
    Console.ReadLine();
}

static void IDsearch()
{
    ManagementObjectSearcher searcher =
        new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_PnPEntity");

    foreach (ManagementObject queryObj in searcher.Get())
    {
        Console.WriteLine("DeviceID: {0}", queryObj["DeviceID"]);
        Console.WriteLine("Description: {0}", queryObj["Description"]);
    }
}

这会为我的计算机上的每个PnP设备生成如下输出:

DeviceID: ACPI\GENUINEINTEL_-_INTEL64_FAMILY_6_MODEL_60_-_INTEL(R)_CORE(TM)_I7-4790_CPU_@_3.60GHZ\_1
Description: Intel Processor

DeviceID: USB\VID_0CF3&PID_3004\ALASKA_DAY_2006
Description: Dell Wireless 1535C Bluetooth Device

如果我还可以获得PCI插槽号,这符合我的要求。

我也遇到了Win32_SystemSlot类,但这似乎并没有让我描述实际插入插槽的内容!所以在这一点上,我可以获得没有PCI插槽的描述......以及没有描述的PCI插槽。我无法将它们映射到一起,这就是我需要的。我必须忽略一些事情或者不提出正确的问题,因为这对我来说是一件非常普遍的事情。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我认为您正在寻找<body> <input type="text" id="userName"> <button onclick="show()">Click</button> </body> <script src="script.js"></script> Win32_Bus类的组合。

Win32_DeviceBus代表运行Windows操作系统(Microsoft Docs)的计算机所看到的物理总线。总线类型可以是PCI,总线号似乎是不同物理PCI总线的枚举。

Win32_Bus涉及系统总线和使用该总线的逻辑设备。此类用于发现哪个设备在哪个总线(Microsoft Docs)上。在我的平台上,与总线关联的设备始终是Win32_DeviceBus

使用这些类,您应该能够从给定的Win32_PnPEntity中找到物理总线属性。

答案 1 :(得分:-1)

这听起来非常脆弱,如果机器移动并且设备插入不同的端口会怎样。是个人项目还是您要分发的内容。如果是后者你应该找到另一种方式。是你自己创作的“事物”吗?如果是这样,您需要为每个人提供具有唯一标识符的能力。如果没有,您应该联系制造商并询问。试图通过端口识别它可能会让你在路上遇到很多麻烦