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

#c# #vbscript #wmi

#c# #vbscript #wmi

Вопрос:

Мне нужно получить информацию об оперативной памяти как с локального, так и с удаленного компьютеров, я знаю о WMI в System.Management, и я использую его, но моя проблема с WMI заключается в том, что класс Win32_PhysicalMemory имеет нужное мне значение «MemoryType«, но он всегда возвращает 0 или «Неизвестно».
Класс Win32_PhysicalMemory (http://msdn.microsoft.com/en-us/library/aa394347(v=vs.85).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"]);
}
  

Ответ №1:

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

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

Комментарии:

1. Нет, это все еще точно. Не вся производимая память содержит необходимую информацию, закодированную в ее EEPROM. Если ее там нет, она не может быть прочитана. Вот так просто.

2. но когда я использую программное обеспечение под названием CPU-Z, оно выдает мне всю информацию, поэтому я знаю, что оно хранится в каком-то программном обеспечении.

3. @неоднозначный: Да, это то, о чем я тоже думал. Хотя Коди прав, возможно, CPU-Z хранит информацию, которую они находят, на основе серийных номеров.