阅读:2402回复:1
USBD_ParseConfigurationDescriptorEx使用问题,我在IRP_MN_PNP中使用不知为什么常得不到接口描述符
VOID GetInterface(IN PDEVICE_OBJECT fido)
{ PURB pUrb = NULL; ULONG dwSize; LONG AlternateSetting,InterfaceClass,InterfaceSubClass,InterfaceProtocol,interfaceindex; AlternateSetting =0; InterfaceClass = 0; InterfaceSubClass = 0; InterfaceProtocol =0; interfaceindex= 0; pUrb = (PURB)ExAllocatePool(NonPagedPool, sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST)); if(pUrb) { dwSize = sizeof(USB_CONFIGURATION_DESCRIPTOR); PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor =NULL; ConfigurationDescriptor = (PUSB_CONFIGURATION_DESCRIPTOR)ExAllocatePool(NonPagedPool, dwSize); if(ConfigurationDescriptor) { UsbBuildGetDescriptorRequest(pUrb, (USHORT)sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST), USB_CONFIGURATION_DESCRIPTOR_TYPE, 0, 0, ConfigurationDescriptor, NULL, dwSize, NULL); //此函数这得到设备描述符命令 SendAwaitUrb(fido,pUrb); } dwSize = ConfigurationDescriptor->wTotalLength; //这个长度是正确的 ExFreePool(ConfigurationDescriptor); KdPrint(("dwSize = %d\n",dwSize)); ConfigurationDescriptor = (PUSB_CONFIGURATION_DESCRIPTOR)ExAllocatePool(NonPagedPool, dwSize); if(ConfigurationDescriptor) { UsbBuildGetDescriptorRequest( pUrb, (USHORT)sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST), USB_CONFIGURATION_DESCRIPTOR_TYPE, 0, 0, ConfigurationDescriptor, NULL, dwSize, NULL); SendAwaitUrb(fido,pUrb); } PUSB_INTERFACE_DESCRIPTOR interfaceDescriptor=NULL; interfaceDescriptor = USBD_ParseConfigurationDescriptorEx(ConfigurationDescriptor, ConfigurationDescriptor, //search from start of config descriptro interfaceindex, // interface number not a criteria; we only support one interface AlternateSetting, // not interested in alternate setting here either InterfaceClass, // interface class not a criteria InterfaceSubClass, // interface subclass not a criteria InterfaceProtocol // interface protocol not a criteria ); if(interfaceDescriptor) { KdPrint(("interfaceDescriptor InterfaceClass=0x%X\n",interfaceDescriptor->bInterfaceClass)); KdPrint(("interfaceDescriptor InterfaceSubClass =0x%X\n",interfaceDescriptor->bInterfaceSubClass )); } ExFreePool(ConfigurationDescriptor); } ExFreePool(pUrb); } interfaceDescriptor 常为NULL |
|
沙发#
发布于:2010-07-27 10:51
版主请回答一下急用
|
|