Аппаратное обеспечение WMI, получить информацию об оперативной памяти

Мне нужно получить информацию об оперативной памяти как с локальных, так и с удаленных компьютеров, я знаю о WMI в System.Management и использую его, но моя проблема с WMI заключается в том, что класс Win32_PhysicalMemory имеет нужное мне значение, называемое "MemoryType », но всегда возвращает 0 или «Неизвестно».
Класс Win32_PhysicalMemory (http://msdn.microsoft.com/en-us/library/aa394347%28v=vs.85%29. aspx)

Я пытался использовать Win32_PhysicalMemory как из C#, так и из VBScript на 3 разных компьютерах XP Professional с учетной записью администратора и получил одно и то же значение 0 или «Неизвестное» MemoryType. Код, который я использовал, прост и короток, скопирован и вставлен из множества источников в сети, поэтому я уверен, что с ним не возникнет серьезных проблем.

Я неправильно использую WMI или есть альтернатива Windows API, которую я могу использовать?
Удаленные отчеты не важны.

В частности, мне нужно подсчитать количество планок оперативной памяти, которые она имеет или может иметь, скорость и тип используемой оперативной памяти, DDR2, DDR3 и т. д. Класс Win32_PhysicalMemory дает мне все это, кроме типа оперативной памяти.

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"]);
}

person ambiguousPanda    schedule 15.04.2011    source источник


Ответы (1)


Согласно этой статье базы знаний, некоторые типы памяти будут указаны как неизвестные, поскольку их не было в SMBIOS (который использует WMI) в то время. Видимо, с тех пор он не обновлялся. В нем говорится, что это относится к Windows Server 2003, но я вижу те же результаты в Windows 7 x64.

Я полагаю, чтобы обойти это, вы можете отказаться от посредника и не использовать WMI, а напрямую использовать SMBIOS. Тут я не очень помогу, но, по крайней мере, это даст вам направление, куда двигаться дальше.

person Jeff Mercado    schedule 15.04.2011
comment
Нет, это еще точно. Не вся производимая память имеет необходимую информацию, закодированную в ее EEPROM. Если его нет, его нельзя прочитать. Просто как тот. - person Cody Gray; 15.04.2011
comment
но когда я использую программное обеспечение под названием CPU-Z, оно дает мне всю информацию, поэтому я знаю, что она где-то хранится. - person ambiguousPanda; 17.04.2011
comment
@ambiguous: Да, я тоже об этом подумал. Хотя Коди прав, вполне возможно, что CPU-Z хранит информацию, которую они находят, на основе серийных номеров. - person Jeff Mercado; 17.04.2011