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?