RegisterDeviceNotification не уведомляет о NI C прибытии Windows Service C ++ - PullRequest
0 голосов
/ 06 августа 2020

Я хотел получать уведомления об уведомлениях устройства (карта NI C добавлена ​​в машину) в службе windows на C ++. Я использовал RegisterDeviceNotification и ожидал регистрацию события ServiceControlHandler через RegisterServiceCtrlHandler. Я также протестировал с добавлением жесткого диска в виртуальную машину.

   g_StatusHandle = RegisterServiceCtrlHandlerEx(SERVICE_NAME, ServiceCtrlHandler);

Регистрация уведомлений,

DEV_BROADCAST_DEVICEINTERFACE NotificationFilter;
ZeroMemory( &NotificationFilter, sizeof(NotificationFilter) );
NotificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;


HDEVNOTIFY hDevNotify = NULL;
for(int i=0; i<sizeof(GUID_DEVINTERFACE_LIST)/sizeof(GUID); i++) {
    NotificationFilter.dbcc_classguid = GUID_DEVINTERFACE_LIST[i];
    hDevNotify = RegisterDeviceNotification(g_StatusHandle, &NotificationFilter, DEVICE_NOTIFY_WINDOW_HANDLE);
    if( !hDevNotify ) {
            WCHAR szBuff[MAX_PATH];
            _snwprintf(szBuff, MAX_PATH, L"failed to register :error :: %d", GetLastError());
            OutputDebugString(szBuff);
    }
    hDevNotify = NULL;
}

и ожидание уведомлений здесь

ServiceCtrlHandlerEx (  DWORD CtrlCode,
                     DWORD dwEventType,
                     LPVOID lpEventData,
                        LPVOID lpContext)
    {
       OutputDebugString(_T("My Sample Service: ServiceCtrlHandler: Entry"));
    
       switch (CtrlCode)
       {
    
       case SERVICE_CONTROL_DEVICEEVENT : 
             //LogHere
          break;
        }
    }

Любая подсказка будет полезна

...