Я хотел получать уведомления об уведомлениях устройства (карта 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;
}
}
Любая подсказка будет полезна