Einzelnen Beitrag anzeigen

Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#1

Unterstützt ein Laufwerk SMART?

  Alt 19. Mai 2006, 14:31
Ich versuche gerade mit einem Tipp von SwissDelphiCenter.de die Smart-Daten meiner Festplatten auszulesen. Das funktioniert soweit ganz gut.

Delphi-Quellcode:
type
  TSmartData = array[0..527] of Byte;
  
{ .... }

procedure GetSmartData(var Data: TSmartData);
var
  hdrive: Cardinal;
  dwBytesReturned: DWORD;
  ipar: array[0..31] of Byte;
  opar: TSmartData;
begin
  ipar[0] := 0;
  ipar[1] := $02;
  ipar[2] := 0;
  ipar[3] := 0;
  ipar[4] := $d0;
  ipar[5] := $01;
  ipar[6] := $01;
  ipar[7] := $4f;
  ipar[8] := $c2;
  ipar[9] := $a0;
  ipar[10] := $b0;
  ipar[11] := 0;
  ipar[12] := 0;
  ipar[13] := 0;
  ipar[14] := 0;
  ipar[15] := 0;
  ipar[16] := $8c;
  ipar[17] := $fd;
  ipar[18] := $14;
  ipar[19] := 0;
  ipar[20] := 0;
  ipar[21] := $02;
  ipar[22] := 0;
  ipar[23] := 0;
  ipar[24] := $03;
  ipar[25] := 0;
  ipar[26] := 0;
  ipar[27] := 0;
  ipar[28] := $03;
  ipar[29] := 0;
  ipar[30] := 0;
  ipar[31] := 0;

  // Get first harddrive
  hdrive := CreateFile(PChar('\\.\PhysicalDrive0'), 3221225472, 3, nil, 3, 0, 0);
  DeviceIoControl(hdrive, $0007C088, @ipar, 32, @opar, 528, dwBytesReturned, nil);
  CloseHandle(hdrive);
  Data := opar;
end;
Leider weiß ich nicht, wieviele PhysicalDrives in dem Rechner stecken. Wenn ich nämlich \\.\PhysicalDrive1 anstatt von \\.\PhysicalDrive0 schreibe, erhalte ich keinen Fehler sondern nur sinnlosen Speichermüll (ist ein CD-Rom, hat also kein Smart). Wie kann ich denn herausbekommen, ob ein PhysicalDrivex Smart unterstützt?
Thomas
  Mit Zitat antworten Zitat