阅读:1527回复:6
对于函数USBD_CreateConfigurationRequestEx的一些疑问,不明白
PURB
USBD_CreateConfigurationRequestEx( IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor, IN PUSBD_INTERFACE_LIST_ENTRY InterfaceList ); PUSBD_INTERFACE_LIST_ENTRY InterfaceList是一个INTERFACE_LIST数组的指针,有几个元素,里面就有多少个接口,但是这个函数返回的是一个urb: 构造好了之后,没有提交之前: struct _USB_SELECT_CONFIGURATION { struct _URB_HEADER Hdr; PUSB_CONFIGRUATION_DESCRIPTOR ConfigurationDescriptor ; USB_CONFIGURATION_HANDLE ConfigurationHandle ; USBD_INTERFACE_INFORMATION Interface ; } ; Interface 是不是空的? 提交urb之后: struct _USB_SELECT_CONFIGURATION { struct _URB_HEADER Hdr; PUSB_CONFIGRUATION_DESCRIPTOR ConfigurationDescriptor ; USB_CONFIGURATION_HANDLE ConfigurationHandle ; USBD_INTERFACE_INFORMATION Interface ; } ; Interface只是一个街口的信息,那么其他的借口都到哪儿去了? 是不是在一个驱动里只有一个接口可以是活动的。 还有:typedef struct _USBD_INTERFACE_INFORMATION { USHORT Length ; UCHAR InterfaceNumber ; UCHAR AlternateSetting ; UCHAR Class ; UCHAR SubClass ; UCHAR Protocol ; . . USBD_INTERFACE_HANDLE InterfaceHandle ; ULONG NumberOfPipes ; 这个结构里面的InterfaceNumber 是什么含义啊? 难道职能得到一个借口的信息? 要是要改变借口的话,应该怎么做啊? |
|
沙发#
发布于:2005-03-28 07:22
菜鸟学驱动,大家多多指教,谢谢了
顶了 |
|
板凳#
发布于:2005-03-28 10:00
只有一个配置是活动的。一个配置可以有好几个接口。
USBD_CreateConfigurationRequestEx的参数InterfaceList必须是 有效指针。可以用ExAllocatePool(NonPagedPool, sizeof(USBD_INTERFACE_LIST_ENTRY) * (numberOfInterfaces + 1));来分配内存。而且分配内存之后必须赋值。最后一个USBD_INTERFACE_LIST_ENTRY必须赋值为NULL。 |
|
|
地板#
发布于:2005-03-28 10:15
InterfaceNumber就是你用usbmonitor也可以看到的那个号码,
这是由硬件定义的。 :) |
|
|
地下室#
发布于:2005-03-28 11:50
只有一个配置是活动的。一个配置可以有好几个接口。 那我得到的是一个接口,其他的借口在哪儿啊? |
|
5楼#
发布于:2005-03-28 11:55
如果那些借口也可用的话,怎么得到他们的句柄,或是怎样设置他们呢?
谢谢 |
|
6楼#
发布于:2005-03-28 21:36
USBD_CreateConfigurationRequestEx返回的是一个urb的指针,这个已经分的了内存,是不是系统分的?还是就是在传的那个参数里,如果是系统分的,他分了几个USBD_INTERFACE_INFORMATION 的结构呢?
/* struct _USB_SELECT_CONFIGURATION { struct _URB_HEADER Hdr; PUSB_CONFIGRUATION_DESCRIPTOR ConfigurationDescriptor ; USB_CONFIGURATION_HANDLE ConfigurationHandle ; USBD_INTERFACE_INFORMATION Interface ; } ; */ |
|