SMBIOS-获取SPD(串行存在检测)模块信息C#

SMBIOS-获取SPD(串行存在检测)模块信息C#,c#,C#,我搜索了很多,但没有找到任何通过C#获取SPD表信息的工作代码。外面有很多软件可以得到这些信息,但是如何获得呢 如图所示,对于RAM设备,您可以看到WMI等根本无法检索的制造商名称 如果有一个DLL可以在C中使用,它也将是完美的 经过一些研究发现: 但它无法读取表17以获取内存设备信息。一旦我对此进行了研究,您需要通过SMBUS(而不是SMBIOS)获取此信息。但是您需要创建一个驱动程序(C/C++中的WDM)来访问此信息。请确保添加了System.Management作为参考 下面是一个字

我搜索了很多,但没有找到任何通过C#获取SPD表信息的工作代码。外面有很多软件可以得到这些信息,但是如何获得呢

如图所示,对于RAM设备,您可以看到WMI等根本无法检索的制造商名称

如果有一个DLL可以在C中使用,它也将是完美的

经过一些研究发现:


但它无法读取表17以获取内存设备信息。

一旦我对此进行了研究,您需要通过SMBUS(而不是SMBIOS)获取此信息。但是您需要创建一个驱动程序(C/C++中的WDM)来访问此信息。

请确保添加了
System.Management
作为参考

下面是一个字符串,它将从组件返回您想要的几乎任何信息:

private string getComponent(string hwClass, string syntax)
    {
        ManagementObjectSearcher mos = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM " + hwClass);
        foreach (ManagementObject mj in mos.Get())
        {
            return Convert.ToString(mj[syntax]);
        }
        return null;
    }
使用字符串如下所示,在按钮上单击:

label1.Text = getComponent("Win32_PhysicalMemory", "SerialNumber");
我测试了它,它返回了一个序列号,你也可以查看你可以输入的内容列表,如制造商、名称、容量等

这些信息我都是从你那里得到的


您可以找到所有设备及其属性(CPU、GPU等)

您看到了吗?@jstreet谢谢,但我搜索了很多,几天前看到了您的链接。但它使用的WMI与我需要的工作方式不同。该代码段返回您明确提到的制造商名称。有什么不符合您的需要?@jstreet只需在几个系统上试用,您就会发现我是对的。WMI无法检测到所有类型的RAMSUPP/Unjk,并以C++方式进行。看一看问题。如果有一个用于C#的dll,也将是完美的。您将无法使用WMI获取内存设备的类型或其制造商的确切名称。@我测试了制造商,它工作正常。下面是指向“PhyscialMemory”语法的msdn链接:。在这里,您可以找到“MemoryType”语法,它返回一个数字,它告诉您哪个数字对应于内存类型。例如,24=DDR3,25=FBD2我的电脑返回26(我假设这是DDR4的数字,因为文档尚未更新)。因此,您可以检查这些数字,并使其与带有IF语句的内存类型相对应。顺便说一句,我使用“SMBIOSMemoryType”在笔记本电脑中获取值,即使在我的PC上,
MemoryType
也将返回0,而且也找不到
SMBIOSMemoryType
。是否有其他应用程序(如“CPU-Z”)返回正确的内存类型?是的,它们在所有系统中都会返回正确的值。