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

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

原文地址:https://www.cnblogs.com/magicdmer/p/10994120.html

时间: 2024-10-13 09:12:30

USB Development Kit (UsbDk) Design and Architecture 中文版的相关文章

整功能使用版Development Kit 4.70 1CD

Ansys.v14.5.1.Update.Only.Win32_64 2CD Ansys.v14.5.1.Update.Only.Linux64 1CD Guthrie Arcv2CAD v6.0 A.29 1CD  Guthrie CAD2Shape v6.0 A.28 1CD  Guthrie DwgConvert v7.0 A.01 1CD  Guthrie HPGL2CAD v4.0 A.15 1CD  Guthrie ShxConvert v4.0 A.20 1CD Landmark

经典错误重现->Java RunTime Environment (JRE) or Java Development Kit (JDK) must be available in order to

经常碰到这种错误,错误代码如下: Java RunTime Environment (JRE) or Java Development Kit (JDK) must be available in order to run STS,No Java Virtual machine was found after searching the following locations:..............................................javaw.exe in y

Java SE Development Kit 5/6/7下载地址

Java SE Development Kit 7 http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html Java SE Development Kit 6 http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase6-419409.html

A Java Runtime Environment (JRE) or Java Development Kit (JDK) must be available in order to run Eclipse. No Java virtual machine was found after searching the following locations: /usr/local/eclipse/

linux系统下jdk是已经安装好的情况之下软件出现 A Java Runtime Environment (JRE) or Java Development Kit (JDK) must be available in order to run Eclipse. No Java virtual machine was found after searching the following locations: /usr/local/eclipse/jre/bin/java java in yo

Java(TM) SE Development Kit 6 卸载不掉怎么办

错误描述:Java 安装时断电,再次安装java时,提示“您的电脑上已经安装了此软件.是否要重新安装”,点“是”后出现“内部错误2753:RegUtils”,点“确定”又出现上述提示. 解决办法 :使用Windows Install Clean Up 将 Java SE Development Kit 删除即可. Java(TM) SE Development Kit 6 卸载不掉怎么办,布布扣,bubuko.com

How to install JDK (Java Development Kit) on Linux

This tutorial will guide you on how to install JDK (Java Development Kit) on Linux. Since I use Centos 5.4 x86_64 in everyday life, this guide is showing you how to install JDK in Centos 5.4 64bit. It must work in any other Linux distro such as Slack

【Linux Ubuntu】安裝 Java SE Development Kit(JDK)並配置環境變量

下載頁面:http://www.oracle.com/technetwork/java/javase/archive-139210.html 打開“Java SE 7”,再打開“Java SE Development Kit 7u80”,選擇“Accept License Agreement”同意 Oracle Binary Code License Agreement for Java SE,點擊對應版本開始下載. 終端輸入以下命令: 1 # 創建 JDK 目錄,-p 爲創建多個目錄 2 $

Ubuntu Eclipse启动时报错:A Java RunTime Environment (JRE) or Java Development Kit (JDK) must be available in order to run Eclipse. No java virtual machine was found after searching the following locations:

此问题起于我在Ubuntu1004上装了两个版本的eclipse:Galieo+helios:卸载前者后出现启动不了eclipse的问题:在网上找了下,可以按如下过程进行解决: Eclipse 3.6 在 Ubuntu 10.04 下会出现一个很奇怪的现象,我没有经过测试,无法确定是Ubuntu 10.04 还是 JDK 还是 Eclipse本身造成的. 这个现象是: 可以在终端顺利启动Eclipse,但是鼠标双击,或者用起动器启动就会出现如下的内容: A Java RunTime Enviro

adt bundle启动eclipse出错:A Java Runtime Environment (JRE) or Java Development Kit (JDK) must be available in order to run Eclipse.

在ubuntu12.04安装好jdk,然后设置好环境变量,然后继续安装好adt bundle 在终端进入adt bundle下的eclipse启动eclipse时没问题 但是从图形界面进入adt bundle下的eclipse启动eclipse时出错,提示如下: A Java Runtime Environment (JRE) or Java Development Kit (JDK) must be available in order to run Eclipse. No Java virt