Почему функция CM_Register_Notification не работает - PullRequest
0 голосов
/ 18 января 2019

Использование CM_Register_Notification функция для получения события смены устройства.

возврат # определение CR_INVALID_DATA (0x0000001F)

Я не хочу использовать RegisterDeviceNotification функцию для получения события смены устройства. Поэтому, пожалуйста, не предлагайте вышеуказанную функцию.

int main()
{
CM_NOTIFY_FILTER cmNotifyFilter = { 0 };
cmNotifyFilter.cbSize = sizeof(cmNotifyFilter);
cmNotifyFilter.Flags = CM_NOTIFY_FILTER_FLAG_ALL_DEVICE_INSTANCES;
cmNotifyFilter.FilterType = CM_NOTIFY_FILTER_TYPE_DEVICEHANDLE;
cmNotifyFilter.u.DeviceInterface.ClassGuid = GUID_DEVINTERFACE_COMPORT;

HCMNOTIFICATION hcm;

char *test = new char[1024]();

CONFIGRET configRet = ::CM_Register_Notification(&cmNotifyFilter, (PVOID)test, (PCM_NOTIFY_CALLBACK)&MyCMInterfaceNotification, &hcm);

if (configRet != CR_SUCCESS) {
    printf("CM_Register_Notification failed, error %d\n", (DWORD)configRet);
}
return 0;
} 

DWORD MyCMInterfaceNotification( HCMNOTIFICATION hNotify, PVOID Context, CM_NOTIFY_ACTION Action, PCM_NOTIFY_EVENT_DATA EventData,DWORD EventDataSize )
 {
   switch (Action) {
case CM_NOTIFY_ACTION_DEVICEINTERFACEARRIVAL:
    wprintf(("MyCmInterfaceNotification: Arrival of %S\n",
        EventData->u.DeviceInterface.SymbolicLink));

    //
    // Enqueue a work item to open target
    //

    break;
case CM_NOTIFY_ACTION_DEVICEINTERFACEREMOVAL:
    wprintf(("MyCmInterfaceNotification: removal of %S\n",
        EventData->u.DeviceInterface.SymbolicLink));
    break;
default:
    printf(("MyCmInterfaceNotification: Arrival unknown action\n"));
    break;
 }
}

Заранее спасибо

...