c# - 将即插即用设备映射到 PCI 插槽 ID,C#

标签 c# hardware

我有一定数量的外部设备,我们称它们为事物。 每个事物都通过插入 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/

相关文章:

c# - 从 C# Windows 应用程序中的 PHP 页面获取 utf8 字符串

WebAssembly 的硬件实现

c - libPAPI : Maximum simultaneous events measure

winforms - DirectShow/WinForms 中的硬件加速视频

c# - 使用多对多关系添加对象 Entity Framework

c# - 如何将空合并运算符与 ActionResult ASP.NET Core 2.1 一起使用

c# - 为什么我可以将无效值解析为 .NET 中的枚举?

c# - IEditableCollectionView 在 CommitEdit 上失去选择

java - 在硬件级别模拟按键 - Windows

c - 如何访问 CPU 的热传感器?