我有一定数量的外部设备,我们称它们为事物。 每个事物都通过插入 PCI 插槽的 PnP 卡与计算机连接。 每张卡都有用于 4 件元素的端口。 我需要为每个持续存在且在重新启动之间保持一致的事物获取一个 UID。 请注意,Things 没有我可以访问的内置 UID。
我解决这个问题的想法是为卡上的每个端口获取一个 UID。在我看来,我只需要弄清楚每张卡插入哪个 PCI 插槽即可。这不会在重新启动时改变,而且端口肯定会以相同的顺序排列......所以我基本上可以用 UID 标记每个端口并知道每个 Thing 与哪个 UID 相关联。
我进行了相当多的搜索以找出最有用的 C# 对象。我发现最接近的是 System.Management
库中的 ManagementObjectSearcher
对象。这是我写的一些简单代码,看看这是否能得到我想要的东西:
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 插槽。我只是无法将它们映射在一起,这正是我所需要的。我一定是忽略了什么或者没有问正确的问题,因为这让我觉得很常见。
感谢您的帮助。
最佳答案
这听起来非常脆弱,如果机器移动并且设备插入不同的端口怎么办。是个人项目或您要分发的项目。如果是后者,你应该找到另一种方法。 “物”是你自己创造的吗?如果是这样,您需要包括每个人都拥有唯一标识符的能力。如果不是,您应该联系制造商并询问。尝试通过端口来识别它可能会让你在路上很头疼
关于c# - 将即插即用设备映射到 PCI 插槽 ID,C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41836846/