阅读:1664回复:2
如何截获USB设备“无法停止通用卷设备”消息?
在USB设备有文件打开的时候停止,会弹出“现在无法停止通用卷”设备,请稍候再停用”的提示? 想拦截这个通知,在哪个层次或哪个进程做好呢?
|
|
沙发#
发布于:2008-09-26 16:24
如何拦截某个USB设备的“无法停止通用卷设备”消息,直接跳过而能够停止? 有大虾知道吗?
|
|
板凳#
发布于:2008-12-13 00:17
#include <windows.h>
#include <dbt.h> #include <strsafe.h> LPCTSTR FileName; // path to the file or device of interest HANDLE hFile; // handle to the file or device PDEV_BROADCAST_HDR pDBHdr; PDEV_BROADCAST_HANDLE pDBHandle; char szMsg[80]; case WM_DEVICECHANGE: switch (wParam) { case DBT_DEVICEQUERYREMOVE: pDBHdr = (PDEV_BROADCAST_HDR) lParam; switch (pDBHdr->dbch_devicetype) { case DBT_DEVTYP_HANDLE: // A request has been made to remove the device; // close any open handles to the file or device pDBHandle = (PDEV_BROADCAST_HANDLE) pDBHdr; if (hFile != INVALID_HANDLE_VALUE) { CloseHandle(hFile); hFile = INVALID_HANDLE_VALUE; } } return TRUE; case DBT_DEVICEQUERYREMOVEFAILED: pDBHdr = (PDEV_BROADCAST_HDR) lParam; switch (pDBHdr->dbch_devicetype) { case DBT_DEVTYP_HANDLE: // Removal of the device has failed; // reopen a handle to the file or device pDBHandle = (PDEV_BROADCAST_HANDLE) pDBHdr; hFile = CreateFile(FileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { StringCchPrintf(szMsg, 80, "CreateFile failed: %lx.\n", GetLastError()); MessageBox(hwnd, szMsg, "CreateFile", MB_OK); } } return TRUE; case DBT_DEVICEREMOVEPENDING: pDBHdr = (PDEV_BROADCAST_HDR) lParam; switch (pDBHdr->dbch_devicetype) { case DBT_DEVTYP_HANDLE: // All queries for removal of the device were // successful; device removal is pending ; } return TRUE; case DBT_DEVICEREMOVECOMPLETE: pDBHdr = (PDEV_BROADCAST_HDR) lParam; switch (pDBHdr->dbch_devicetype) { case DBT_DEVTYP_HANDLE: pDBHandle = (PDEV_BROADCAST_HANDLE) pDBHdr; // The device has been removed from the system; // unregister its notification handle UnregisterDeviceNotification( pDBHandle->dbch_hdevnotify); } return TRUE; default: return TRUE; } |
|