有没有办法在 windows 上以编程方式查找系统芯片组的北桥、南桥名称和其他硬件信息?我不认为 WMI 提供了这些信息。我试图找出像hwinfo和cpuinfo这样的工具是如何找到这些信息的。
1 回答
人们通常通过 WMI 执行此类操作,但它很多时候无法提供有用的信息,甚至提供“错误”信息,因为有时它依赖于来自 BIOS(通过 SMBIOS)的供应商填充信息,这些信息经常为空或错误,而不是去与特定的硬件部分进行通信。
我以前经历过这种经历来获取 RAM 信息。WMI 提供了错误的 BIOS 信息,我发现 RAM 芯片带有一个特殊的 SPD(串行存在检测)芯片,我需要与之通信。最后我的雇主选择了 CPUID API。
这里 CPU-Z 的作者在一次采访中谈到了这个话题:
http://www.techpowerup.com/mobile/reviews/Interviews/Franck_Delattre/1.html。
要获得这样的信息,您需要搜索如何通过驱动程序在内核模式下与 PCI 配置空间进行通信,或者寻找一些可以为您执行此操作的替代 API。
以下是我当时浏览的一些链接:
http://www.codeproject.com/Articles/35378/Access-Physical-Memory-Port-and-PCI-Configuration
http://support.microsoft.com/?scid=kb;en-us;253232&x=3&y=13
http://www.hollistech.com/Resources/Misc%20articles/getbusdata.htm
http://www.osronline.com/showThread.CFM?link=176210#T4
另外,我认为值得一提的是 Windows 中的 SetupDi 函数,它有时能够提供 WMI 无法提供的信息。