AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

WMI: BytesPerSectors einer Festplatte ermitteln

Ein Thema von Glados · begonnen am 29. Okt 2017 · letzter Beitrag vom 31. Okt 2017
 
Glados
(Gast)

n/a Beiträge
 
#1

WMI: BytesPerSectors einer Festplatte ermitteln

  Alt 29. Okt 2017, 23:21
Ich komme gerade nicht weiter. Ich versuche die Sektorgröße einer Festplatte zu ermitteln.
Das Problem für mich jetzt ist, dass Win32_Volume zwar DriveLetter kennt, aber nicht BytesPerSector.
Dafür kennt Win32_DiskDrive BytesPerSector, aber nicht DriveLetter.
DriveLetter brauche ich aber um einen Vergleich anstellen zu können.

Das hier ist mein Code bisher (99% von WMI Code Ceator).
Ich habe Festplatte C (SanDisk SSD) und D (Seagate HDD).

Wenn ich im Aufruf unten "D" übergebe, zeigt mir die Showmessage als DriveLetter tatsächlich D, aber der Rest zeigt Daten meiner SSD (Caption).

Delphi-Quellcode:
procedure GetVolumeSectorSize(Volume: string);
 function GetWMIObject(const objectName: string): IDispatch;
 var
  chEaten: Integer;
  BindCtx: IBindCtx; // for access to a bind context
  Moniker: IMoniker; // Enables you to use a moniker object
 begin
  OleCheck(CreateBindCtx(0, BindCtx));
  OleCheck(MkParseDisplayName(BindCtx, StringToOleStr(objectName), chEaten, Moniker)); // Converts a string into a moniker that identifies the object named by the string
  OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, Result)); // Binds to the specified object
 end;

var
 FWMIService, FWMIServiceEx: OLEVariant;
 FWbemObjectSet, FWbemObjectSetEx: OLEVariant;
 oEnum, oEnumEx: IEnumvariant;
 iValue, iValueEx: LongWord;
begin;
 Volume := Trim(Volume);

 if Volume = 'then
  Exit;

 FWMIService := GetWMIObject(Format('winmgmts:\\%s\%s', ['.', 'root\CIMV2']));
 FWbemObjectSet := FWMIService.ExecQuery(Format('SELECT * FROM %s WHERE DriveLetter=%s', ['Win32_Volume ', QuotedStr(Volume + ':')]), 'WQL', 0);
 oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumvariant;

 if oEnum.Next(1, FWbemObjectSet, iValue) = 0 then
  begin
   FWMIServiceEx := GetWMIObject(Format('winmgmts:\\%s\%s', ['.', 'root\CIMV2']));
   FWbemObjectSetEx := FWMIServiceEx.ExecQuery(Format('SELECT * FROM %s', ['Win32_DiskDrive']), 'WQL', 0);
   oEnumEx := IUnknown(FWbemObjectSetEx._NewEnum) as IEnumvariant;

   while oEnumEx.Next(1, FWbemObjectSetEx, iValueEx) = 0 do
    begin
     ShowMessage(string(FWbemObjectSet.Properties_.Item('DriveLetter', 0)) + sLineBreak + string(FWbemObjectSetEx.Properties_.Item('Caption', 0)) + ': ' + Format('BytesPerSector %d',
      [Integer(FWbemObjectSetEx.Properties_.Item('BytesPerSector', 0))]));
    end;
  end;
end;

CoInitialize(nil);
try
 GetVolumeSectorSize('D');
finally
 CoUninitialize;
end;
Resultat
Zitat:
D:
SanDis SDSSDHII120G SCSI Disk Device: BytesPerSector 512

Geändert von Glados (30. Okt 2017 um 03:25 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz