【发布时间】:2017-06-09 18:18:42
【问题描述】:
我有一定数量的外部设备,我们称它们为事物。 每个事物都通过插入 PCI 插槽的 PnP 卡与计算机连接。 每张卡都有 4 个东西的端口。 我需要为每个持续存在且在重新启动之间保持一致的事物获取一个 UID。 请注意,Things 没有我可以访问的内置 UID。
我解决这个问题的想法是为卡上的每个端口获取一个 UID。在我看来,我只需要弄清楚每张卡插入哪个 PCI 插槽。这不会在重新启动时改变,而且端口肯定会以相同的顺序排列......所以我基本上可以用 UID 标记每个端口并知道每个事物与哪个 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 插槽。我只是无法将它们映射在一起,这正是我所需要的。我一定是忽略了什么或者没有问正确的问题,因为这让我觉得很常见。
感谢您的帮助。
【问题讨论】:
-
嗨 Keith,我不知道你的问题的答案,但在我看来,你需要找到一种方法来获取设备的 ID 而不是端口。这些东西应该有一些东西可以识别它们……看看这个……msdn.microsoft.com/en-us/windows/hardware/drivers/install/…
-
@GreatJobBob。事实上,事物确实有描述。它们在不同的事物之间并不是唯一的。我正在尝试识别和区分同时连接的多个事物。换句话说,虽然我有一个 ID,但要获得一个 UID,我需要映射到卡和端口。
-
你的东西连接的卡应该有一个 UID,所以你不能扫描卡 UID 来知道你的卡安装到哪个 PCI 插槽?
-
你解决过这个问题吗?如果可能的话,我还需要报告设备以及它们所在的 PCI 插槽。
-
不,我从来没有解决过这个问题。最终为每个“事物”使用单独的计算机而不是单个主板并使用消息队列。无论如何,这实际上对我的特殊需求更有意义。但不,即使经过大量研究,我也从未真正找到答案。