DeviceIoControl(..., FSCTL_LOCK_VOLUME,...); Issue
-
Ich möchte ein Volume sperren (USB), aber ich erhalte immer eine
ERROR_INVALID_HANDLE
FehlermeldungHANDLE hDev = CreateFile( "\\\\.\\E:", 0, (FILE_SHARE_READ | FILE_SHARE_WRITE), NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL ); if (hDev == INVALID_HANDLE_VALUE) { cout << "CreateFile() failed!" << endl; cout << "GetLastError(): " << GetLastError() << endl; return -1; } DWORD bytesReturned; OVERLAPPED overlapped; BOOL retDevIoCtrl = DeviceIoControl( hDev, // handle to a volume FSCTL_LOCK_VOLUME, // dwIoControlCode NULL, // lpInBuffer 0, // nInBufferSize NULL, // lpOutBuffer 0, // nOutBufferSize &bytesReturned, // number of bytes returned &overlapped // OVERLAPPED structure ); if (!retDevIoCtrl) { cout << "FSCTL_LOCK_VOLUME failed!" << endl; cout << "GetLastError(): " << GetLastError() << endl;
Der Output ist immer "
FSCTL_LOCK_VOLUME failed! GetLastError(): 6
"Ich habe schon ein paar Variationen der CreateFile Parameter versucht, aber bisher konnte ich keine Lösung finden. Vielleicht kann jemand helfen? Benutze ich die falschen Parameter? So weit ich das erkennen kann, benutze ich sie, wie in der MSDN Dokumentation angegeben.
Vielen Dank
Nico
-
Schauen wir doch mal nach, was Fehlercode 6 bedeutet...
http://msdn.microsoft.com/en-us/library/windows/desktop/ms681382.aspx
MSDN schrieb:
the handle is invalid
aha!
-
Den Teil, wo du das Event-Handle in der OVERLAPPED-Struktur setzt, hast du weggelassen?
-
dot schrieb:
Schauen wir doch mal nach, was Fehlercode 6 bedeutet...
http://msdn.microsoft.com/en-us/library/windows/desktop/ms681382.aspx
MSDN schrieb:
the handle is invalid
aha!
Wer lesen kann...
Kronos_m schrieb:
erhalte immer eine ERROR_INVALID_HANDLE Fehlermeldung
Genau das war die Frage, warum ist das Hanle invalid und nicht was Error Code 6 bedeutet!
@MFK
Danke für den Hinweis! Habe jetzt folgenden Teil dazwischen geschoben:DWORD bytesReturned; OVERLAPPED overlapped; ZeroMemory(&overlapped, sizeof(OVERLAPPED)); HANDLE hEvent = CreateEvent( NULL, FALSE, FALSE, NULL ); if (!hEvent) { cout << "CreateEvent failed!" << endl; cout << "GetLastError(): " << GetLastError() << endl; return -1; } overlapped.hEvent = hEvent;
Nun ist der output jedoch:
`FSCTL_LOCK_VOLUME failed!
GetLastError(): 1
`
Und ja, nur für den Fall der Fälleich weiß, dass das "Incorrect function" bedeutet, nur warum
-
Danke noch mal an MFK!
Beispiel geht nun! Hab den
dwDesiredAccess
vonCreateFile()
nun noch auf(GENERIC_READ | GENERIC_WRITE)
gesetzt: Et voilà!