Zitat von
Go2EITS:
Ja ich auch. Aber bei mir geht es nicht.
Das mag ja sein - aber dann zu behaupten der code würde nicht gehen finde ich etwas dreist
Zitat:
Du hast einen Bug drin, wie ich sehe, das zum Thema generalisieren, (wie ich erst das hasse:
)
Ich nicht... der code ist ja nicht von mir!
Außerdem wäre ich mit der Bezeichnung "Fehler" vorsichtig - bei mir funktioniert der Code ja wunderbar
Zitat:
Na, dann bleibt nur noch am Schluss diese Threads den richtigen Code zu veröffentlichen, damit niemand so rumstoppselt wie ich. Ich habe den Code mal getestet und hier geschrieben. Das ist doch wohl ok?
Und mit der Bezeichnung "richtig" wäre ich aus obigem Grund auch vorsichtig. Man könnte sich das ganze natürlich irgendwie erleichtern indem man einen char als Parameter übergibt und nicht einen Integer - wieso das so ist leuchtet mir nämlich im Moment nicht ganz ein
Delphi-Quellcode:
function IDW(Drive: TChar): Boolean;
const
IOCTL_DISK_IS_WRITABLE = ( ($00000007 shl 16) or (0 shl 14) or ($0009 shl 2) or 0);
var
Device: String;
hFile: THandle;
BytesReturned: Cardinal;
begin
Result := false;
Device := Format('\\.\%s:', [Drive]);
hFile := CreateFile(@Device[1], GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, nil,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if hFile <> 0 then
begin
Result := DeviceIoControl(hFile, IOCTL_DISK_IS_WRITABLE, nil, 0, nil, 0,
BytesReturned, nil);
CloseHandle(hFile);
end;
end;
Result := IDW('A');