• 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 请求流程图 **
    —————————————————————

    重定向生效后的设备栈架构
    —————————————————————

  • 相关阅读:
    数组和切片
    if else,for循环,switch语句
    数据库介绍以及MySQL数据库的使用
    Django Rest Framwork的认证组件 权限组件以及频率组件
    Django Rest Frawwork框架的CBV FBV分析
    事务介绍
    celery介绍
    多道技术 进程 线程 协程 GIL锁 同步异步 高并发的解决方案 生产者消费者模型
    win10安装mysql8.0版本
    安装VMware Tools的注意事项
  • 原文地址:https://www.cnblogs.com/magicdmer/p/10994120.html
Copyright © 2020-2023  润新知