4

I need to retrieve RAM info from both local and remote computers, I am aware of WMI in System.Management and I am using it, but my problem with WMI is that the Win32_PhysicalMemory class has a value that I need called "MemoryType", but it always returns 0 or "Unknown".
Win32_PhysicalMemory class (http://msdn.microsoft.com/en-us/library/aa394347%28v=vs.85%29.aspx)

I have tried to use Win32_PhysicalMemory from both C# and VBScript on 3 different XP Professional computers with an admin account and got the same 0 or "Unknown" MemoryType value returned. The code I used is simple and short, copy and pasted from a number of sources around the net so I'm sure there aren't major problems with it.

Am I using WMI wrongly or is there a Windows API alternative i can use?
Remote reports aren't essential.

Specifically I need to count the number of sticks of RAM it has, or can have, the speed, and the type of RAM it uses, DDR2, DDR3, etc., the Win32_PhysicalMemory class gives me all this except the type of 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"]);
}
Sk8erPeter
  • 6,899
  • 9
  • 48
  • 67
ambiguousPanda
  • 109
  • 1
  • 1
  • 9

1 Answers1

3

According to this kb article, certain types of memory will be listed as unknown since it wasn't in the SMBIOS (which WMI uses) at the time. Apparently it hasn't been updated since then. It says it applies to Windows Server 2003 but I see the same results on Windows 7 x64.

I suppose to get around this, you can cut the middle man and not use WMI but use the SMBIOS directly. I won't be of much help there but at least it will give you a direction to go on.

Jeff Mercado
  • 129,526
  • 32
  • 251
  • 272
  • No, that's still accurate. Not all memory produced has the necessary information encoded in its EEPROM. If it's not there, it can't be read. Simple as that. – Cody Gray - on strike Apr 15 '11 at 06:59
  • but when i use a software called CPU-Z it gives me all the infomation, so i know that it is stored someware. – ambiguousPanda Apr 17 '11 at 14:57
  • @ambiguous: Yeah that's what I was thinking too. Though Cody has a point, it could be that CPU-Z stores the information that they find based on serial numbers. – Jeff Mercado Apr 17 '11 at 18:12