Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Unterstützt ein Laufwerk SMART? (https://www.delphipraxis.net/69743-unterstuetzt-ein-laufwerk-smart.html)

Codewalker 19. Mai 2006 13:31


Unterstützt ein Laufwerk SMART?
 
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?

Flocke 19. Mai 2006 18:54

Re: Unterstützt ein Laufwerk SMART?
 
Schon mal daran gedacht, die Rückgabewerte von CreateFile und DeviceIoControl zu überprüfen?

Daniel G 19. Mai 2006 19:06

Re: Unterstützt ein Laufwerk SMART?
 
1 Jahr hab' ich versucht, diesen blöden SmartApp - Beispiel - C - Code von Microsoft nach Delphi zu portieren.... Und jetzt steht hier sowas... ICH KÖNNTE HEULEN!!! :wall: :wall:


Du brauchst ja eh nur für 4 Laufwerke prüfen... Mehr gehen ja nicht.... Prüfe den Rückgabewert von CreateFile einfach auf INVALID_HANDLE_VALUE... Das sollte bei Read - Only Medien passieren...

Luckie 19. Mai 2006 19:10

Re: Unterstützt ein Laufwerk SMART?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier mal eine Unit aus meiner SysInfo Anwendung. Du brauchst usätzlich noch die JEDI WinAPI Übersetzungen von den Jedis.

Daniel G 19. Mai 2006 19:23

Re: Unterstützt ein Laufwerk SMART?
 
Ich würde allerdings den Timer deutlich höher stellen.... So eine niedrige Refresh - Rate bringt's nicht wirklich....

Codewalker 30. Mai 2006 14:16

Re: Unterstützt ein Laufwerk SMART?
 
Danke Luckie für die Unit. Funktioniert wunderbar.
Wie ist das, darf ich die auch kommerziell nutzen (vllt mache ich in Zukunft mal was mit Smart in einem Programm von mir)? Reicht es wenn ich dich in die Credits schreibe?


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 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-2025 by Thomas Breitkreuz