So, auf
MSDN stand bei IOCTL_VOLUME_OFFLINE, dass man ruhig alles hintereinander ausführen soll:
Delphi-Quellcode:
hDisk := CreateFile('
\\.\N:', GENERIC_READ
or GENERIC_WRITE, FILE_SHARE_READ
or FILE_SHARE_WRITE,
nil, OPEN_EXISTING, 0, 0);
if hDisk = INVALID_HANDLE_VALUE
then
raise Exception.Create('
opening failed');
if not LockVolume(hDisk)
then
Showmessage('
not locked!!');
if not DeviceIOControl(hDisk, FSCTL_DISMOUNT_VOLUME,
nil, 0,
nil, 0, written,
nil)
then
Showmessage('
dismounting failed');
if not DeviceIOControl(hDisk, IOCTL_VOLUME_OFFLINE,
nil, 0,
nil, 0, written,
nil)
then
Showmessage('
still online!!!');
CloseHandle(hDisk);
Der Code ansich funktioniert, es kommt keine Meldung.
In Windows wird das Laufwerk als "Lokaler Datenträger" angezeigt, hat keine Größe und ich habe auch keinen Zugriff mehr darauf. Kann ich jetzt noch irgendwas danach ausführen, dass Windows ihn endgültig rauswirft?
Aber dass er jetzt schonmal unbenutzbar ist finde ich gut, danke für die bisherige Hilfe.
Auf
MSDN steht auch noch, dass man danach das Gerät "Deinstallieren" kann, ich konnte aber nicht herausfinden wie das geht.
Ich habe auch folgende Codes ausprobiert, alle schlugen mit False als Ergebnis fehl (Funktion/Anforderung wird nicht unterstützt)
IOCTL_STORAGE_RESET_DEVICE
IOCTL_DISK_EJECT_MEDIA
IOCTL_DISK_REMOVE_DEVICE
IOCTL_STORAGE_EJECT_MEDIA
Edit: Ich mach mal einen neuen Thread auf, das hat ja nicht mehr 100%ig was mit der eigentlich Frage zu tun.