Происходит аварийное завершение работы программы при использовании функции CreateFile с устройством пути
Я могу получить интерфейс устройства и распечатать путь устройства, но когда я ввожу путь устройства в качестве параметра для создания файла, программа выходит из строя в том месте, где она должна создать файл с ошибкой 0xC0000005.
У меня есть 64-битный компьютер с Windows 7, я пытаюсь подключиться к чтению данных с этой USB-веб-камеры специально
Docooler USB 2.0 12-мегапиксельная HD камера веб-камера с микрофоном Clip-on[^]
Вот код, который я использую.
Я автоматически устанавливаю необходимый размер деталей интерфейса на 90, потому что самый высокий - 82
У меня также есть if (i == 2), потому что именно тогда выводится путь устройства для камеры.
i= 0; if((webdevices = SetupDiGetClassDevs(&GUID_DEVINTERFACE_USB_DEVICE,NULL,NULL,(DIGCF_PRESENT|DIGCF_DEVICEINTERFACE))) != NULL){ printf("SetupDiGetClassDevs Worked!!\n"); }else{ printf("SetupDiGetClassDevs didn't work error %d\n",GetLastError()); } webDevInfoDat->cbSize = sizeof(SP_DEVINFO_DATA); webInterDat->cbSize = sizeof(SP_DEVICE_INTERFACE_DATA); SetupDiEnumDeviceInfo(webdevices,i,webDevInfoDat); while(sdei = SetupDiEnumDeviceInterfaces(webdevices,NULL,&GUID_DEVINTERFACE_USB_DEVICE,i,webInterDat)){ if(SetupDiGetDeviceInterfaceDetail(webdevices,webInterDat,webInterDetDat,interDetSiz,&reqInterDetSiz,webDevInfoDat)){ printf("Interface Detail Data\nDevicePath: %s\nRequired Size: %d\n",webInterDetDat->DevicePath,reqInterDetSiz); }else{ printf("Getting SetupDiGetDeviceDetail error %d RequiredSize %d\n",GetLastError(),reqInterDetSiz); } if(i == 2){ webcam = CreateFile(webInterDetDat->DevicePath,(GENERIC_READ|GENERIC_WRITE),(FILE_SHARE_READ|FILE_SHARE_WRITE),NULL,OPEN_EXISTING,0,NULL); if(webcam == INVALID_HANDLE_VALUE){ printf("Creating File didn't work %d\n",GetLastError()); }else{ printf("Creating File did work %s\n",webcam); close(webcam); } } printf("\n"); i++; webInterDat->cbSize = sizeof(SP_DEVICE_INTERFACE_DATA); } if(sdei){ }else{ printf("Getting SetupDiEnumDeviceInterfaces error %d I is %d\n",GetLastError(), i); }
Что я уже пробовал:
Я попытался сохранить его в А-методах, а затем попытался изменить его на широкие методы.
Я пытался изменить"? "на".". Затем я попробовал добавить"\\\. \ " и "\\\?\", но это все равно не сработало.
Когда я комментирую метод create file, он работает отлично и доходит до конца программы без ошибок.
jeron1
Если вы установите точку останова при вызове CreateFile (), все параметры будут такими, как вы ожидаете?
Member 12701845
Я попробовал пройти через него с помощью отладчика, и похоже, что все значения верны. У вас есть еще какие-нибудь идеи?