USB Development Kit (UsbDk) Design and Architecture 中文版

Posted magicdmer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了USB Development Kit (UsbDk) Design and Architecture 中文版相关的知识,希望对你有一定的参考价值。

这是我对UsbDk官方文档的翻译,希望对大家有帮助,有错误之处还请谅解.
UsbDk开发套件是由一套软件工具和模块组成,它把USB设备从PNP管理器和设备驱动分离,并提供了一系列API供用户层程序直接独占的访问USB设备,进行USB设备相关操作。
UsbDk一开始是用来为spice远程桌面程序提供USB重定向的支持,然而它可以被用来做很多其他相关事情,通过UsbDk自带的库或者通过libusb(我们为libusb做了backend支持)

UsbDk开发套件包含以下模块:

  1. UsbDk.sys – USB总线过滤驱动,用来获取对USB设备的独占访问
  2. UsbDkHelper.dll – 辅助dll,用来安装,卸载,设置驱动。并转发USB请求到指定的USB设备
  3. UsbDkController.exe – 简单的命令行程序,用来演示和验证相关接口
    remote-viewer程序调用UsbDk接口,用来对USB设备进行发现,访问和重定向的操作

系统架构总览
技术图片

UsbDk.sys 是一个USB过滤驱动,也是一个USB设备驱动。
安装的时候,它被注册为一个USB过滤驱动,当有USB设备或者USB Hubs设备被系统发现的时候,系统会调用它。在调用的时候,UsbDk.sys会检查底层设备的标识并单独为USB Hubs 创建过滤示例

作为一个USB Hub的过滤驱动,UsbDk.sys 接收来自USB设备栈上层设备的所有请求,包括PNP管理器所发送的枚举请求(IRP_MJ_PNP/IRP_MN_QUERY_DEVICE_RELATIONS)。

等USB hub驱动完成对PNP管理器枚举请求的处理,UsbDk.sys会扫描返回的子设备列表,假设有设备被标记为重定向(根据现有的配置)它会为这些设备生产过滤实例

因此,所有PNP管理器请求都将通过UsbDk.sys回调,后者根据需要会修改设备ID属性以使PNP管理器识别该设备为通用USB设备。

除此之外,UsbDk.sys 标记下层设备对象为 raw PDO,这样系统会分为这些设备对象分配驱动(创建他们的驱动,也就是UsbDk.sys)作为设备驱动

在此阶段,所有对此vendor id的特定设备请求都将被转发到UsbDk.sys,UsbDk.sys会根据需求修改或者传递相关设备的请求

UsbDkHelper.dll提供了一个单独的API,用来把指定USB设备从USB设备栈中分类,而不需要获取对设备的实际访问。(隐藏API)

这个API可能对一些安全程序很有用,比如根据安全策略阻止对USB设备的访问,防止Windows显示仅由UsbDk管理的设备的“发现新硬件”弹窗。当UsbDk.sys在枚举阶段发现要隐藏的设备标识,它会在处理(IRP_MJ_PNP/IRP_MN_QUERY_DEVICE_RELATIONS)的时候从USB bus driver返回的设备列表中擦除相关设备,这有效的把设备从PNP管理器和系统的驱动栈中隐藏了起来。

UsbDk安装后的设备栈结构
—————————————————————
技术图片

QUERY_DEVICE_RELATIONS 请求流程图
—————————————————————
技术图片

设备获取访问流程图
—————————————————————
技术图片

重定向后 QUERY_DEVICE_RELATIONS 请求流程图
—————————————————————
技术图片

重定向生效后的设备栈架构
—————————————————————
技术图片

以上是关于USB Development Kit (UsbDk) Design and Architecture 中文版的主要内容,如果未能解决你的问题,请参考以下文章

SDK(software development kit)和 API

SDKMAN——The Software Development Kit Manager

整功能使用版Development Kit 4.70 1CD

Azure Stack Development Kit 部署

Azure Stack Development Kit 部署

jdk (Java Development Kit)