WMI硬件,获取RAM信息

我需要从本地和远程计算机检索RAM信息,我知道System.Management中的WMI并且我正在使用它,但我的WMI问题是Win32_PhysicalMemory类有一个我需要的值称为“ MemoryType ”,但是它总是返回0或“未知”。
Win32_PhysicalMemory类 (http://msdn.microsoft.com/en-us/library/aa394347%28v=vs.85%29.aspx)

我试图在具有管理员帐户的3台不同XP Professional计算机上使用C#和VBScript中的Win32_PhysicalMemory,并返回相同的0或“Unknown”MemoryType值。 我使用的代码简单而简短,从网络上的许多来源复制和粘贴,所以我确信它没有重大问题。

我错误地使用WMI还是有可以使用的Windows API替代方案?
远程报告不是必需的。

具体来说,我需要计算它拥有或可以拥有的RAM的数量,速度,它使用的RAM类型,DDR2,DDR3等,Win32_PhysicalMemory类为我提供除RAM类型之外的所有这些。

ConnectionOptions connection = new ConnectionOptions(); connection.Impersonation = ImpersonationLevel.Impersonate; ManagementScope scope = new ManagementScope("\\\\.\\root\\CIMV2", connection); scope.Connect(); ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_PhysicalMemory"); ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query); foreach (ManagementObject queryObj in searcher.Get()) { System.Diagnostics.Debug.WriteLine("-----------------------------------"); System.Diagnostics.Debug.WriteLine("Capacity: {0}", queryObj["Capacity"]); System.Diagnostics.Debug.WriteLine("MemoryType: {0}", queryObj["MemoryType"]); } 

根据这篇kb文章 ,某些类型的内存将被列为未知,因为它当时不在SMBIOS(WMI使用)中。 显然它从那时起就没有更新过。 它说它适用于Windows Server 2003,但我在Windows 7 x64上看到了相同的结果。

我想绕过这个,你可以削减中间人,而不是使用WMI但直接使用SMBIOS。 我不会在那里提供太多帮助,但至少它会给你一个方向继续。