CD-Laufwerk sperren
-
Joar die Russen haben allet^^, wenn Du gestattest, bringe ein paar kleine Verbesserungen/Ergänzungen rein:
// Parameter: chDriveID > Laufwerkbuchstaben, fLock > true/false, lock/unlock // Return-Wert: true > Aufruf erfolgreich, false > Aufruf fehlerhaft bool ModifyDriveLock(TCHAR chDriveID, bool fLock) { TCHAR szAddress[] = { TEXT('\\'), TEXT('\\'), TEXT('.'), TEXT('\\'), chDriveID, TEXT(':') }; HANDLE hDevice = CreateFile(szAddress, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, NULL, NULL); if(hDevice == INVALID_HANDLE_VALUE) return (false); DWORD dwBytesReturned = 0L; PREVENT_MEDIA_REMOVAL pmr = { fLock }; bool fSuccess = static_cast<bool>(DeviceIoControl(hDevice, IOCTL_STORAGE_MEDIA_REMOVAL, &pmr, sizeof(pmr), NULL, 0, &dwBytesReturned, NULL)); CloseHandle (hDevice); return (fSuccess); }EDIT: Meine ist besser :p .
-
Den cast kannste dir sparen, wenn du das so machst wie ich, und ob unsigned long oder DWORD ist auch egal, ansonsten die Klammern beim return, is zwar nicht so schlimm, aber geht ja auch ohne und ob 0L oder 0 ist bisher auch noch egal. Ansonsten die Überprüfung ob das Handle angelegt werden konnte ist Jacke wie Hose, da das spätestens beim Versuch das zu locken bemerkt wird. So, nachdem ich kein gutes Haar mehr an deiner Version gelassen habe, muss ich noch hinzufügen, dass das mit TCHAR besser ist als mit wsprintf, da man sich nen Funktionsaufruf spart...
Mfg Ominion
EDIT: ich würde ja fast sagen unentschieden, aber wegen TCHAR haste doch gewonnen...

-
Naja, meins ist zeichensatz-unabhängig
.
-
Vielen Dank für die vielen Antworten.
Doch so richtig klappts noch nich:
ModigyDriveLock lockt nichts, aber bei LockDrive klappts!
Doch bei gar keiner Variante kann ich mein Laufwerk wieder entsperren!!!
Ich krieg mein Laufwerk nicht mehr auf!!
Helft mir!!!

-
du musst bei mir bLock auf false setzen, falls du es nicht gemacht hast
Mfg Ominion
EDIT: tja CodeFinder, bei mir klappt es auch nicht...ich glaube die Medaille geht diesesmal an mich

-
Das hab ich gemacht, aber es passiert trotzdem nichts!!!!
-
also haste das so gemacht:
LockDrive ("F", false);oder so
LockDrive ('F', false);also bei mir klappt es mit der 2. Variante
Mfg Ominion
EDIT: sry war quatsch, er spuckt ja nen error beim compilieren aus, wenn du das nach 1. machst.
-
OT: ich stehe gerade total auf nem schlauch. wie kann ich ein char* in char umwandeln?= mit (char), lpChar[0], wsprintf oder cChar = lpChar[0] geht es nicht.
Mfg Ominion
-
Hey Ominion,
deine Fkt. klappt doch, war wohl mein Fehler.
Aber ich wüsste gern mal, warum die ModifyDriveLock nict funzt.
Ich habe es getestet: Die ModifyDriveLock gibt immer false zurück. Warum?
-
Mir fällt grad noch was ein:
Kann man alle Laufwerksbuchstaben der CD-Laufwerke ermitteln?
-
naja, ich habe gerade in den einem topic nen link zu nem tutoril gepostet, da war das glaube ich mit drin, das war wie lerne ich richtig winapi oder so
Mfg Ominion
-
Kannste mir den Link geben?
-
-
Danke.

-
Und was ist, wenn CD-Laufwerke keinen Laufwerksbuchstaben haben, sondern in irgendein NTFS-Verzeichnis gemountet wurden?
-
Na dann musst du dir was einfallen lassen

Mfg Ominion
-
Das Tutorial ist recht gut, Ominion
Und ich hab auch das mit den laufwerken gefunden.
Aber das hilft mir irgendwie nicht. Haste noch ne andere Idee?
-
leider nicht. ich habe dazu nur was für visual basic gefunden.
Mfg Ominion
-
tsp schrieb:
Hey Ominion,
deine Fkt. klappt doch, war wohl mein Fehler.
Aber ich wüsste gern mal, warum die ModifyDriveLock nict funzt.
Ich habe es getestet: Die ModifyDriveLock gibt immer false zurück. Warum?Sry, hatte noch keine Zeit zu schreiben, hier liegt der Fehler:
TCHAR szAddress[] = { TEXT('\\'), TEXT('\\'), TEXT('.'), TEXT('\\'), chDriveID, TEXT(':') };Ein C-String muss immer mit einem \0 enden. Das habe ich hier übersehen, wegen der Zuweisung über die einzelnen Elemente.
Hier die korrigierte Fassung:
// Parameter: chDriveID > Laufwerkbuchstaben, fLock > true/false, lock/unlock // Return-Wert: true > Aufruf erfolgreich, false > Aufruf fehlerhaft bool ModifyDriveLock(TCHAR chDriveID, bool fLock) { TCHAR szAddress[] = { TEXT('\\'), TEXT('\\'), TEXT('.'), TEXT('\\'), chDriveID, TEXT(':'), TEXT('\0') }; HANDLE hDevice = CreateFile(szAddress, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, NULL, NULL); if(hDevice == INVALID_HANDLE_VALUE) return (false); DWORD dwBytesReturned = 0L; PREVENT_MEDIA_REMOVAL pmr = { fLock }; bool fSuccess = static_cast<bool>(DeviceIoControl(hDevice, IOCTL_STORAGE_MEDIA_REMOVAL, &pmr, sizeof(pmr), NULL, 0, &dwBytesReturned, NULL)); CloseHandle (hDevice); return (fSuccess); }
-