Hallo,
also ich habe da noch ein bisschen in Richtung DeviceIOContro weiter gesucht und das gefunden was ich wollte.
Die Lösung sieht wie folgt aus (Die Funktion war hier irgendwo auch so im Forum bei einer Frage dabei).
Jedes mal wenn man fertig ist mit schreiben und das typische CloseFile oder FileStream.Free kommt einfach noch folgender Aufruf:
Delphi-Quellcode:
function Umount(Laufwerk: Char): Boolean;
const
IOCTL_STORAGE_EJECT_MEDIA = $2D4808;
FSCTL_DISMOUNT_VOLUME = $90020;
var
hDrive: Cardinal;
bytesRet: Cardinal;
begin
hDrive := CreateFile(PAnsiChar('\\.\' + Laufwerk + ':'),
GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE,
nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL or FILE_FLAG_NO_BUFFERING,
0);
if hDrive <> INVALID_HANDLE_VALUE then
begin
DeviceIOControl(hDrive, FSCTL_DISMOUNT_VOLUME, nil, 0, nil, 0, bytesRet, nil);
CloseHandle(hDrive);
result := TRUE;
end else result := FALSE;
end;
IOCTL_STORAGE_EJECT_MEDIA sorgt dafür, dass der Fehler nicht mehr auftritt. Problem war, dass ein Zugriff auf das Medium danach nicht mehr möglich ist. Der Anwender wäre gezwungen die SD-Karte raus zu ziehen und wieder ein zu stecken.
FSCTL_DISMOUNT_VOLUME hat den richtigen Effekt. Der Datenträger wird beim nächsten Zugriffsversuch automatisch vom System wieder gemountet.
Das nur für die Leute, die irgendwann auch mal auf dieses Problem stoßen.
Danke an alle.
Gruß Chris