windows ddk USB复合设备驱动怎么同时读两个pipe通过USBD_CreateConfigurationRequestEx查找到了3个interfaces,1个是键盘,1个是鼠标。配置完成之后,得到2个pipe。
通过readfile访问驱动的IRP_MJ_READ读取其中1个pipe,可以获取数据。(这里readfile是阻塞了的,IoMarkIrpPending(Irp))
应用层如果用2个线程来readfile,也只有等其中1个读取完毕,才可以读。
我如何修改驱动,才能同时读取2个pipe的数据呢
一个Endpoint用IRP_MJ_READ获取数据,另外一个用自定义的Device IO Control进行?
不行啊,这个方法我也试过。
应用程序在线程里面,调用自定义的Device IO Control,被阻塞了,需要等待前面的readfile返回才能进行Device IO Control,
是因为IRP_MJ_READ函数里面的IRP返回STATUS_PENDING状态,导致的吗?
如果我把IRP_MJ_READ函数里面的IRP返回设置成STATUS_SUCCESS状态,要蓝屏。
设备是一个笔记本的键盘+触摸板。
系统会根据Interface或者某个独立的Interface Set的数量,多次调用adddevice吗?
我的驱动是这么实现的:
1,首先在DriverEntry指定MajorFunction派遣函数
2,在AddDevice中IoCreateDevice,并且IoRegisterDeviceInterface注册/*"USB", "{36FC9E60-C465-11CF-8056-444553540000}",*/,然后设置DO_DIRECT_IO方式(read的时候,可以用MDL)
3,PnpStartDevice中只做了IoSetDeviceInterfaceState
4,在create中,才进行配置描述符和接口描述符,并且IOCTL_INTERNAL_USB_SUBMIT_URB来配置
5,应用层读写pipe
确切需求:同时获取USB复合设备的两个interface的pipe数据,互不干扰。
目前只能串行读取(IRP处理方式决定了的?),不能并行读取。
疑问:是否需要分别给两个interface加载不同的驱动,来分别生成PDO+FDO,这样,访问两个设备,就不会干扰了?