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.