Thema: Delphi SMART-Werte lesen

Einzelnen Beitrag anzeigen

Daniel G
(Gast)

n/a Beiträge
 
#16

Re: SMART-Werte lesen

  Alt 10. Jul 2006, 18:15
Hm... So peu à peu finde ich ja Zeit, den Code auseinander zu nehmen. Ich hatte mich schon gewundert, aber na gut, ich dachte halt, wenns von Microsoft kommt, wird's schon stimmen. Folgendes:

Diese Funktion hier:

Delphi-Quellcode:
//---------------------------------------------------------------------
// Open SMART to allow DeviceIoControl communications.
//---------------------------------------------------------------------
Function OpenSMART: THandle;
Begin
  Result := INVALID_HANDLE_VALUE;

  If ( Win32Platform = VER_PLATFORM_WIN32_WINDOWS ) Then
  Begin
      // Version Windows 95 OSR2, Windows 98
    Result := CreateFile('\\.\SMARTVSD', 0, 0, Nil, CREATE_NEW, 0, 0);

    //printf("Unable to open SMARTVSD, error code: 0x%lX\n", GetLastError());
  End
  Else If( Win32Platform = VER_PLATFORM_WIN32_NT ) Then
  Begin
    // Windows NT, Windows 2000
    Result := CreateFile('\\.\PhysicalDrive0', GENERIC_READ Or GENERIC_WRITE,
                         FILE_SHARE_READ Or FILE_SHARE_WRITE, Nil, OPEN_EXISTING, 0, 0);

    //printf("Unable to open physical drive, error code: 0x%lX\n", GetLastError());
  End;
End;
liefert unter NT - Systemen lediglich ein Handle auf die erste Festplatte (Was ja durch '\\.\PhysicalDrive0' auch nicht anders zu erwarten ist.) Dennoch wird die Schleife bei zwei Festplatten zweimal durchlaufen. Blöd nur, das beim zweiten Durchlauf immer noch das Handle für die erste Festplatte genommen wird. Unter Win9x ist der Code korrekt, da das Handle zur Smartvsd.vxd erzeugt wird. Unter NT funktioniert das so aber nicht. Das muss für jede Festplatte ein Handle mit '\\.\PhysicalDrivex' (x = Zahl von 0 - 3) erzeugt werden.

Wollte ich nur als kleinen Hinweis geben, für Leute, die den Code verwenden.
  Mit Zitat antworten Zitat