私が間違っていることを教えてください。
「無効なデバイスSERVICE_CONTROL_DEVICEEVENT
」を抜き差ししたときに通知されないのはなぜですか(つまり、デバイス マネージャーでデバイスを無効にします)。
デバイスが有効になっている場合、すべて正常に動作します。ここに私のソースコードがあります:
登録通知:
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; }
事前に助けてくれてありがとう!