WM_DEVICECHANGE: Zumachen, wenn usb-stick entfernt wird
-
Hallo Leute.
Wie der Titel sagt, möchte ich meine exe, die von autorun.inf von usb-stick gestartet wird, schließen, wenn der stick entfernt werden soll.
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { static HANDLE hModuleFile; PDEV_BROADCAST_HDR deviceHDR; PDEV_BROADCAST_HANDLE deviceHandle; switch (uMsg) { case WM_CREATE: // diese funktion öffnet ein Handle von CreateFile, dass von GetModuleFileName(0) kommt hModuleFile = GetModuleHandle(0); deviceHandle->dbch_handle = hModuleFile; deviceHandle->dbch_devicetype = DBT_DEVTYP_HANDLE; RegisterDeviceNotification(hWnd, deviceHandle, DEVICE_NOTIFY_WINDOW_HANDLE); return 0; case WM_DESTROY: CloseHandle(hModuleFile); PostQuitMessage(0); return 0; case WM_DEVICECHANGE: switch (wParam) { case DBT_DEVICEQUERYREMOVE: deviceHDR = (PDEV_BROADCAST_HDR)lParam; if (deviceHDR->dbch_devicetype == DBT_DEVTYP_HANDLE) // die exe soll geschlossen werden // also zum test piepen Beep(440, 1000); // aber bei meinen Tests piepte er net... return 0; } return 0; default: return DefWindowProc(hWnd, uMsg, wParam, lParam); } } HANDLE OpenModuleHandle(HMODULE hModule) { WCHAR fileName[MAX_PATH + 1]; GetModuleFileName(hModule, fileName, MAX_PATH); return CreateFile(fileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); }Was könnte daran falsch sein?
Den Code habe ich von MSDN:
http://msdn2.microsoft.com/en-us/library/aa363427(VS.85).aspxVielen Dank für eure Hilfe!!!

-
Ich weiß jetzt nicht direkt, was daran nicht funktioniert, aber kann es sein, dass in
PDEV_BROADCAST_HANDLE deviceHandle;ein Fehler liegt? Das müsste doch ein Zeiger auf die DEV_BROADCAST_HANDLE-Struktur sein, der Zeiger ist aber uninitialisiert. Evtl direkt eine Instanz von DEV_BROADCAST_HANDLE erstellen und bei RegisterDeviceNotification einen Zeiger darauf übergeben?
-
bei der msdn stand das auch so. (siehe link)
welche fehler seht ihr noch?
Könnt ihr den verbesserten code posten?