USB HID开发CreateFile得不到句柄解决方案
USB HID开发CreateFile得不到句柄
如题。
SetupDiGetDeviceInterfaceDetail返回正确值。但是发现DevicePath返回的是一个乱码。
跟踪SP_DEVICE_INTERFACE_DETAIL_DATA结构的下DevicePath,发现它是一个CHAR数组,但其数组元素的个数ANYSIZE_ARRAY (define at winnt.h)却是1。
我想CreateFile得不到句柄是不是和设备路径无法正确读取有关。要如何解决,还望大虾帮忙啊。
------解决方案--------------------
SetupDiGetDeviceInterfaceDetail要调用两次,第一次要把第3三个参数设置为NULL以获得返回数据长度到第4个参数,然后再用这个长度进行第二次调用。
DWORD Length = 0;
SetupDiGetDeviceInterfaceDetail(hDevInfo,
&DeviceInterfaceData,
NULL,
0,
&Length,
NULL);
pDeviceInterfaceDetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(Length);
pDeviceInterfaceDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); //MUST BE!!!
SetupDiGetDeviceInterfaceDetail(hDevInfo,
&DeviceInterfaceData,
pDeviceInterfaceDetailData,
Length,
NULL,
NULL))
返回的路径中一定会有HID,PID和VID等字符串。
如题。
SetupDiGetDeviceInterfaceDetail返回正确值。但是发现DevicePath返回的是一个乱码。
跟踪SP_DEVICE_INTERFACE_DETAIL_DATA结构的下DevicePath,发现它是一个CHAR数组,但其数组元素的个数ANYSIZE_ARRAY (define at winnt.h)却是1。
我想CreateFile得不到句柄是不是和设备路径无法正确读取有关。要如何解决,还望大虾帮忙啊。
------解决方案--------------------
SetupDiGetDeviceInterfaceDetail要调用两次,第一次要把第3三个参数设置为NULL以获得返回数据长度到第4个参数,然后再用这个长度进行第二次调用。
DWORD Length = 0;
SetupDiGetDeviceInterfaceDetail(hDevInfo,
&DeviceInterfaceData,
NULL,
0,
&Length,
NULL);
pDeviceInterfaceDetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(Length);
pDeviceInterfaceDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); //MUST BE!!!
SetupDiGetDeviceInterfaceDetail(hDevInfo,
&DeviceInterfaceData,
pDeviceInterfaceDetailData,
Length,
NULL,
NULL))
返回的路径中一定会有HID,PID和VID等字符串。