C++ 服务控制设备事件不发生';拔下插头时,不要通知”;禁用设备“;
拜托,你能告诉我我做错了什么吗 为什么C++ 服务控制设备事件不发生';拔下插头时,不要通知”;禁用设备“;,c++,windows,winapi,service,C++,Windows,Winapi,Service,拜托,你能告诉我我做错了什么吗 为什么服务\u控制\u设备事件在插拔“禁用设备”(我是指在设备管理器中禁用设备)时不通知 如果设备已启用,则一切正常。 以下是我的源代码: 注册通知: m_hServiceStatus = RegisterServiceCtrlHandlerEx(m_szServiceName, HandlerEx, NULL); if (m_hServiceStatus == NULL) { return; } DWORD dwState = SERVICE_STA
服务\u控制\u设备事件
在插拔“禁用设备”(我是指在设备管理器中禁用设备)时不通知
如果设备已启用,则一切正常。
以下是我的源代码:
- 注册通知:
m_hServiceStatus = RegisterServiceCtrlHandlerEx(m_szServiceName, HandlerEx, NULL); if (m_hServiceStatus == NULL) { return; } DWORD dwState = SERVICE_START_PENDING; SetServiceStatus(m_hServiceStatus, &dwState); // Register device notification DEV_BROADCAST_DEVICEINTERFACE notificationFilter; ZeroMemory( ¬ificationFilter, sizeof(notificationFilter) ); notificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE); notificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE; if(NULL == (m_hDevNotify = RegisterDeviceNotification(m_hServiceStatus, ¬ificationFilter, DEVICE_NOTIFY_SERVICE_HANDLE|DEVICE_NOTIFY_ALL_INTERFACE_CLASSES))) { return; }
功能:HandlerEx
DWORD HandlerEx(DWORD dwOpcode, DWORD dwEventType, LPVOID lpEventData, LPVOID /*lpContext*/) throw() { DWORD dwRes = ERROR_CALL_NOT_IMPLEMENTED; switch (dwOpcode) { case SERVICE_CONTROL_STOP: if (m_hDevNotify) { UnregisterDeviceNotification(m_hDevNotify); m_hDevNotify = NULL; } dwRes = NO_ERROR; break; case SERVICE_CONTROL_SHUTDOWN: if (m_hDevNotify) { UnregisterDeviceNotification(m_hDevNotify); m_hDevNotify = NULL; } dwRes = NO_ERROR; break; case SERVICE_CONTROL_DEVICEEVENT: { // ToDo: process event notification dwRes = NO_ERROR; } break; default: break; } return dwRes; }
提前感谢您的帮助 第一个事件是DBT_DEVICEARRIVAL,但只有当设备可用时才会触发,如果设备被禁用,则永远不会发生。我不希望禁用的设备成为任何通知的来源。我在另一个应用程序中尝试了WM_DEVICECHANGE。DBT_DEVNODES_CHANGED event(DBT_DEVNODES_CHANGED event)在插入/拔出禁用的设备时会发出通知:该消息未列为HandlerEx为SERVICE_CONTROL_DEVICEEVENT发送的消息之一;是的,你说得对,谢谢。因此,我必须使用WM_DEVICECHANGE。但是有一点混乱的信息“没有关于系统中添加或删除哪个设备的附加信息。需要更多信息的应用程序应该使用RegisterDeviceNotification功能注册设备通知。”第页: