zoukankan      html  css  js  c++  java
  • 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 请求流程图 **
    —————————————————————

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

  • 相关阅读:
    深拷贝浅拷贝
    计算属性和监听,computed,watch
    字面量的引用与使用
    MYSQL 触发器
    JavaScript寻找对象方式
    JavaScript事件传播
    HTML 绑定事件
    JavaScript 中的 String()方法
    JavScript re模块
    JavScript Math函数的使用方法
  • 原文地址:https://www.cnblogs.com/magicdmer/p/10994120.html
Copyright © 2011-2022 走看看