阅读:1347回复:1
找设备路径出现的问题
请问以下程序打开路径过程中,为什么BOOL status=SetupDiEnumDeviceInterfaces(husb,NULL,&USB_DRIVER_GUID,Index,&DeviceInterfaceData)返回总为零???
DWORD Index; DWORD ReqLength; DWORD Flags=DIGCF_PRESENT|DIGCF_DEVICEINTERFACE; GUID USB_DRIVER_GUID= {0x36FC9E60, 0xC465, 0x11CF, {0x80, 0x56, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}; HANDLE husb=0; PSP_DEVICE_INTERFACE_DETAIL_DATA DeviceDetailData; SP_DEVICE_INTERFACE_DATA DeviceInterfaceData; DeviceInterfaceData.cbSize=sizeof(SP_DEVICE_INTERFACE_DATA); husb=SetupDiGetClassDevs(&USB_DRIVER_GUID,NULL,NULL,Flags); if(husb==INVALID_HANDLE_VALUE) { return; } BOOL status=SetupDiEnumDeviceInterfaces(husb,NULL,&USB_DRIVER_GUID,Index,&DeviceInterfaceData); if(!status) { CloseHandle(husb); return; } SetupDiGetInterfaceDeviceDetail(husb,&DeviceInterfaceData,NULL,0,&ReqLength,NULL); DeviceDetailData=(PSP_INTERFACE_DEVICE_DETAIL_DATA)new char[ReqLength]; if(DeviceDetailData) { CloseHandle(husb); return; } status=SetupDiGetInterfaceDeviceDetail(husb,&DeviceInterfaceData,DeviceDetailData,ReqLength,&ReqLength,NULL); if(!status) { delete DeviceDetailData; DeviceDetailData=NULL; return; } HANDLE hUSB = CreateFile (DeviceDetailData->DevicePath, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL); |
|
沙发#
发布于:2005-08-04 16:08
BOOL status=SetupDiEnumDeviceInterfaces(husb,NULL,&USB_DRIVER_GUID,Index,&DeviceInterfaceData)返回总为零
这个问题我今天刚好遇到, 原因可能是: 1. 你在执行这个函数的时候没有插上USB设备。所以应当确保Usb设备与主机在已经连接的状态,驱动程序已经安装的情况下(usb设备图标不出现问号),再调用SetupDiEnumDeviceInterfaces; 2. 上次调用了SetupDiEnumDeviceInterfaces函数, 但是在退出应用程序时没有调用SetupDiDestroyDeviceInfoList( husb), 再次打开应用程序,调用SetupDiEnumDeviceInterfaces会返回0; 3. 编写的驱动程序有问题 |
|