Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi WMI-Abfrage zur Ermittlung des Speichertyps fehlerhaft (https://www.delphipraxis.net/191913-wmi-abfrage-zur-ermittlung-des-speichertyps-fehlerhaft.html)

devidespe 2. Mär 2017 18:42

WMI-Abfrage zur Ermittlung des Speichertyps fehlerhaft
 
Hallo,

ich weiß, es gibt hier unzählige Themen zu WMI, und doch bin ich nicht fündig geworden.

Ich muss per WMI den Typ des Arbeitsspeichers ermitteln, also führte mich der Weg zu folgender WMI-Abfrage:

SELECT MemoryType FROM Win32_PhysicalMemory

und gemäß offizieller Doku https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx soll dieser Wert den Speichertyp enthalten, und eine zugegebenermaßen veraltete Tabelle erlaubt dann Rückschlüsse auf DDR, DDR2 usw.

Leider erhalte ich ständig den Typ 0 zurück, was laut Tabelle "Unknown" bedeutet. Hat jemand eine Idee, wo ich noch nachsehen kann?

Laut meinen Infos werden die WMI-Daten teilweise aus den SMBios/DMI-Daten des Mainboard-BIOS zusammengestellt, und dort steht korrekt DDR4 drin - aber offensichtlich wird diese Info nicht an WMI weitergegeben...

Towmuz 3. Mär 2017 08:36

AW: WMI-Abfrage zur Ermittlung des Speichertyps fehlerhaft
 
Moin,

hier gibts einen schicken Artikel über das direkte Auslesen des SMBios, auch über WMI, nur eben über den Namespace root\WMI.

Ich meine da gibt es auch einen Unterschied zwischen den Daten in root\CIMV2\Win32_PhysicalMemory und dem was in root\WMI\MSSmBios_RawSMBiosTables steht.

TiGü 3. Mär 2017 09:13

AW: WMI-Abfrage zur Ermittlung des Speichertyps fehlerhaft
 
Zitat:

Zitat von Towmuz (Beitrag 1363099)
Ich meine da gibt es auch einen Unterschied zwischen den Daten in root\CIMV2\Win32_PhysicalMemory und dem was in root\WMI\MSSmBios_RawSMBiosTables steht.

Da steht zumindest bei mir aber nicht der genaue Typ (DDR1, DDR2, DDR3...etc.) mit dabei.

Delphi-Quellcode:
//-----------------------------------------------------------------------------------------------------
//     This code was generated by the Wmi Delphi Code Creator (WDCC) Version 1.9.9.350
//     http://code.google.com/p/wmi-delphi-code-creator/
//     Blog http://theroadtodelphi.wordpress.com/wmi-delphi-code-creator/
//     Author Rodrigo Ruz V. (RRUZ) Copyright (C) 2011-2015 
//----------------------------------------------------------------------------------------------------- 
//
//     LIABILITY DISCLAIMER
//     THIS GENERATED CODE IS DISTRIBUTED "AS IS". NO WARRANTY OF ANY KIND IS EXPRESSED OR IMPLIED.
//     YOU USE IT AT YOUR OWN RISK. THE AUTHOR NOT WILL BE LIABLE FOR DATA LOSS,
//     DAMAGES AND LOSS OF PROFITS OR ANY OTHER KIND OF LOSS WHILE USING OR MISUSING THIS CODE.
//
//----------------------------------------------------------------------------------------------------
program GetWMI_Info;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  ActiveX,
  ComObj,
  Variants,
  Classes;
 

   
// Raw SMBIOS Tables

procedure GetMSSmBios_RawSMBiosTablesInfo;
const
  WbemUser           ='';
  WbemPassword       ='';
  WbemComputer       ='localhost';
  wbemFlagForwardOnly = $00000020;
var
  FSWbemLocator : OLEVariant;
  FWMIService  : OLEVariant;
  FWbemObjectSet: OLEVariant;
  FWbemObject  : OLEVariant;
  oEnum        : IEnumvariant;
  iValue       : LongWord;
  SMBiosData: TBytes;
  StringStream: TStringStream;
begin;
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService  := FSWbemLocator.ConnectServer(WbemComputer, 'root\WMI', WbemUser, WbemPassword);
  FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM MSSmBios_RawSMBiosTables','WQL',wbemFlagForwardOnly);
  oEnum        := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
  while oEnum.Next(1, FWbemObject, iValue) = 0 do
  begin
    Writeln(Format('Active                %s',[String(FWbemObject.Active)]));// Boolean
    Writeln(Format('DmiRevision           %d',[Integer(FWbemObject.DmiRevision)]));// Uint8
    Writeln(Format('InstanceName          %s',[String(FWbemObject.InstanceName)]));// String
    Writeln(Format('Size                  %d',[Integer(FWbemObject.Size)]));// Uint32
    Writeln('SMBiosData:');// Array of Uint8
    StringStream := TStringStream.Create(TBytes(FWbemObject.SMBiosData));
    Writeln(StringStream.DataString);
    StringStream.Free;
    Writeln(Format('SmbiosMajorVersion    %d',[Integer(FWbemObject.SmbiosMajorVersion)]));// Uint8
    Writeln(Format('SmbiosMinorVersion    %d',[Integer(FWbemObject.SmbiosMinorVersion)]));// Uint8
    Writeln(Format('Used20CallingMethod   %s',[String(FWbemObject.Used20CallingMethod)]));// Boolean
      
    Writeln('');
    FWbemObject:=Unassigned;
  end;
end;


begin
 try
    CoInitialize(nil);
    try
      GetMSSmBios_RawSMBiosTablesInfo;
    finally
      CoUninitialize;
    end;
 except
    on E:EOleException do
        Writeln(Format('EOleException %s %x', [E.Message,E.ErrorCode]));
    on E:Exception do
        Writeln(E.Classname, ':', E.Message);
 end;
 Writeln('Press Enter to exit');
 Readln;    
end.
Code:
Size                  2937
SMBiosData:
ÿÿAmerican Megatrends Inc. V1.9 03/30/2015             ØËSzq.MSI MS-7817 1.0 To be filled by O.E.M. To be filled by O.E.M. To be filled by O.E.M.          
 MSI H81M-P33 (MS-7817) 1.0 To be filled by O.E.M. To be filled by O.E.M. To be filled by O.E.M.        J1A1 Keyboard    ÿJ2A1 TV Out            J2A2A COM A     J2A2B Video                  J3A1 USB1
 ÿ  ÿJ6C2 - EXT HDMI   ÿ  ÿJ3C1 - GMCH FAN  ÿ  ÿJ1D1 - ITP       ÿ  ÿJ9E2 - MDC INTPSR        ÿ  ÿJ9E4 - MDC INTPSR        ÿ  ÿJ9E3 - LPC HOT DOCKING   ÿ  ÿJ9E1 - SCAN MATRIX       ÿ  ÿJ9G1 - LPC SIDE BAND     ÿ  ÿJ   J6B2           ãJ6B1             äJ6D1             åJ7B1            æJ8B4             çJ8D1              ðJ8B3  ! To Be Filled By O.E.M. " To Be Filled By O.E.M. #     $                   " %     LM78-1  &   ? ? ? ? ?     ?LM78A $'         # ( % % & To Be Filled By O.E.M. )   ? ? ? ? ?     ?LM78A $*         # + % ( ) To Be Filled By O.E.M. , )      ?Cooling Dev 1  $-         # . % + , To Be Filled By O.E.M. / )      ?   $0         # 1 % . / To Be Filled By O.E.M. 2   ? ? ? ? ?     ?ABC $3  ? ? ? ? ? ?  # 4 % 1 / To Be Filled By O.E.M. 5 j ? ? ? ? ?     ?LM78A 6 j ? ? ? ? ?     ?LM78A 7 6 g     ?Cooling Dev 1  8 j ? ? ? ? ?     ?ABC '9  ?¢5 7 8 To Be Filled By O.E.M. To Be Filled By O.E.M. To Be Filled By O.E.M. To Be Filled By O.E.M. To Be Filled By O.E.M. To Be Filled By O.E.M. To Be Filled By O.E.M. )A$? > @   Í SOCKET 0 Intel Intel(R) Core(TM) i5-4690 CPU @ 3.50GHz Fill By OEM Fill By OEM > ?     CPU Internal L2  ? ?     CPU Internal L1  @ '      CPU Internal L3  A    þÿ           (B A þÿ@ @            ? @    @ÜÜÜChannelA-DIMM0 BANK 0 1311 41061E3F 9876543210 M2F8G64CB8HD5N-DI  #C    ÿÿ B G ÿÿÿ                  (D A þÿ                         ChannelA-DIMM1 BANK 1 [Empty] [Empty] 9876543210 [Empty] (E A þÿ                               ChannelB-DIMM0 BANK 2 [Empty] [Empty] 9876543210 [Empty] (F A þÿ
                  ChannelB-DIMM1 BANK 3 [Empty] [Empty] 9876543210 [Empty] G    ÿÿ A                   ^K    ƒ@L 5           ø \O               Ê     È ÿÿ        f  vPro     ?M 
N                 en|US|iso8859-1  P  N/A N/A N/A N/A N/A N/A N/A N/A N/A
SmbiosMajorVersion    2
SmbiosMinorVersion    8
Used20CallingMethod   False

TiGü 3. Mär 2017 09:19

AW: WMI-Abfrage zur Ermittlung des Speichertyps fehlerhaft
 
Wobei ich das natürlich hier nur so schnell so per StringStream encoded habe.
Mit den Strukturen aus dem Artikel kommt man vielleicht etwas weiter.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz