当前位置: 首页> 汽车> 新车 > windows USB 设备驱动程序开发-总线接口查询

windows USB 设备驱动程序开发-总线接口查询

时间:2025/7/11 17:47:57来源:https://blog.csdn.net/m0_72813396/article/details/140095668 浏览次数: 0次
总线接口的查询

USB 客户端驱动程序可以获取对USB总线驱动程序接口的引用,并使用它来访问总线驱动程序例程,而不是使用 I/O 请求数据包 (IRP) 机制。

使用总线驱动程序接口为客户端驱动程序提供了几个优势:

  • 它可以使用接口的服务,而无需分配 IRP;
  • 它可以在引发 IRQL 时调用接口的例程;

在 Windows Vista USB 中,客户端驱动程序本身可以公开接口,以帮助 USB 通用类通用父驱动程序 为其管理的设备定义接口集合。

若要获取总线驱动程序接口,客户端驱动程序必须向总线驱动程序发送 IRP_MN_QUERY_INTERFACE 请求。 在客户端驱动程序中:

  1. 在下一个堆栈位置创建IRP_MN_QUERY_INTERFACE类型的 IRP。
    irpstack = IoGetNextIrpStackLocation(irp);
    irpstack->MajorFunction= IRP_MJ_PNP;
    irpstack->MinorFunction= IRP_MN_QUERY_INTERFACE;
  2. 为接口分配内存,并使堆栈指向新内存。 例如,为 USB_BUS_INTERFACE_USBDI_V0 接口分配内存:
    irpstack->Parameters.QueryInterface.Interface = (USB_BUS_INTERFACE_USBDI_V0) newly allocated interface buffer;
  3. 将 InterfaceSpecificData 设置为 NULL。
    irpstack->Parameters.QueryInterface.InterfaceSpecificData = NULL;
  4. 使用适当的接口 GUID、接口的大小和接口的版本初始化 IRP 堆栈。
    irpstack->Parameters.QueryInterface.InterfaceType = &USB_BUS_INTERFACE_USBDI_GUID;
    irpstack->Parameters.QueryInterface.Size = sizeof(USB_BUS_INTERFACE_USBDI_V0);
    irpstack->Parameters.QueryInterface.Version = USB_BUSIF_USBDI_VERSION_0;
    ntStatus = IoCallDriver(PDO that the client passes URBs to, irp);

     5.用 IoCallDriver 以在堆栈中向下传递查询接口 IRP。

ntStatus = IoCallDriver(PDO that the client passes URBs to, irp);
关键字:windows USB 设备驱动程序开发-总线接口查询

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: