全称:eXtensible Host Controller Interface(可扩展主机控制器接口),USB‑IF 标准化硬件接口规范; USB xHCI Compliant Host Controller驱动是指支持USB 3.0及以上标准的主机控制器驱动程序。这种驱动程序允许计算机系统与USB 3.0及更高版本的设备进行通信和数据传输。

USB xHCI Compliant Host Controller 完整解构

全称:eXtensible Host Controller Interface(可扩展主机控制器接口),USB‑IF 标准化硬件接口规范;

Windows 设备管理器显示名称:USB xHCI Compliant Host ControllerMicrosoft ...。 定位:现代 PC 通用 USB 主机控制器,单套硬件同时支持 USB1.1 (1.5/12Mbps)、USB2.0 (480Mbps)、USB3.x (5G/10G/20Gbps),彻底替代老旧 UHCI / OHCI / EHCI 三套独立控制器架构。

Windows 内核驱动栈:usbxhci.sys(xHCI 硬件 FDO) + ucx01000.sys(UCX 主机控制器扩展层),基于 KMDF 框架开发,Win8/Win10/Win11 原生内置;Win7 需要额外安装第三方 xHCI 驱动包Microsoft ...。

xHCI 组件边界区分表

组件 角色
xHCI 硬件(PCIe 设备) 芯片组内部 PCIe 设备;MMIO 寄存器、TRB/TR 环形缓冲区 DMA、MSI‑X 中断、端口物理层;硬件完成 USB 协议帧收发
usbxhci.sys xHCI 硬件专属驱动;直接操作硬件寄存器,管理命令环 / 事件环 / 传输环,处理中断;KMDF 客户端驱动,FDO 设备对象
ucx01000.sys(UCX) USB 主机控制器通用抽象扩展层;统一 URB、电源、PnP 接口;隔离上层 hub 驱动与底层硬件差异;所有 I/O 请求先经过 UCX 再下发 usbxhci.sys
usbhub3.sys xHCI 根集线器驱动;管理控制器内置 USB 端口、热插拔、端口复位、链路电源管理 U0‑U3
usbccgp.sys USB 复合设备父驱动;往下对接 hub,往上对接各类 USB 设备类驱动(U 盘、键盘、网卡)
PCI 总线驱动 (pci.sys) 枚举 PCIe xHCI 设备,分配 MMIO 内存空间、MSI‑X 中断资源,PnP 启动设备

补充配套组件扩展行(可直接追加到上表)

组件 角色
wdf01000.sys KMDF 内核框架库;usbxhci.sys、ucx01000.sys 依赖的驱动框架
usbstor.sys USB 存储类驱动;U 盘 / USB 磁盘上层业务驱动
usbxhci.inf 系统 INF 文件;负责匹配 xHCI PCI 硬件 ID,安装usbxhci.sys驱动栈

一、底层原理 & 内部五大模块

模块 1:硬件核心数据结构(xHCI 规范定义,内存 DMA 共享)

全部环形缓冲区驻留在系统内存,硬件通过 DMA 直接访问,驱动与硬件双向交互核心载体:

  1. Command Ring(命令环):驱动下发全局硬件命令(分配设备 Slot、复位端口、配置设备上下文),存放 Command‑TRB。
  2. Event Ring(事件环):硬件向驱动回传事件;传输完成、端口热插拔、错误、命令完成;硬件写入 Event‑TRB;支持多事件环绑定 MSI‑X 多中断向量,CPU 多核负载均衡。
  3. Transfer Ring(传输环):每个设备端点独立一个环形队列;上层 USB 传输请求转换为 Transfer‑TRB,做数据收发;统一处理控制 / 批量 / 中断 / 等时传输,不再区分 EHCI 的多种调度队列。
  4. Doorbell(门铃寄存器):驱动写门铃寄存器,通知硬件:“对应端点传输环存在待处理 TRB,请开始处理”,避免频繁寄存器轮询。
  5. DCBAAP 设备上下文基地址数组:维护全部接入 USB 设备的 Slot 槽位;每个 Slot 包含 Slot Context、Endpoint Context;保存设备地址、速度、端点配置、带宽参数。

核心对比旧 EHCI:EHCI 区分异步 / 周期队列,1.1 设备需要 TT 中转;xHCI 一套 TRB/Ring 模型统一全部速率、全部传输类型,硬件内部完成速率转换,不需要 TT 集线器中转逻辑。

模块 2:硬件初始化模块(usbxhci.sys)

  1. PCI 总线 pci.sys 枚举 xHCI PCIe 设备,分配 MMIO 内存窗口、MSI‑X 中断向量。
  2. usbxhci.sys映射 MMIO 寄存器空间;读取 xHCI 能力寄存器版本(1.0/1.1/1.2)。
  3. 分配系统内存:命令环、事件环、设备上下文数组 DCBAAP。
  4. 初始化中断(MSI‑X 优先,回退传统 INTx);IMOD 中断节流配置,降低中断频率减少 CPU 占用。
  5. 启动 xHCI 控制器硬件;复位全部根端口;通知上层usbhub3.sys接管端口热插拔检测。

模块 3:I/O 请求转换与下发模块(UCX + usbxhci.sys)

  1. 上层 USB 设备驱动下发 URB(USB Request Block) I/O 请求;先送达ucx01000.sys做请求校验、队列管理。
  2. UCX 将请求转发usbxhci.sys;驱动把 URB 转换为硬件可识别的 TRB(Transfer Request Block),填入对应端点 Transfer Ring。
  3. 写入对应 Doorbell 门铃寄存器,通知硬件开始处理队列。
  4. 硬件 DMA 访问内存 TRB,执行 USB 总线传输;数据直接在设备内存与 USB 外设之间 DMA 搬运,CPU 不参与数据拷贝。

模块 4:中断事件处理模块

  1. 硬件传输完成 / 端口热插拔 / 报错,写入 Event‑TRB 到 Event Ring,触发 MSI‑X 中断。
  2. CPU 触发中断,usbxhci.sys中断服务例程 ISR 读取事件环;解析事件类型:传输完成、端口连接断开、设备错误。
  3. 把完成状态回传给 UCX,UCX 向上层完成 URB 回调,通知上层 USB 类驱动;更新事件环读指针 ERDP。
  4. 错误处理:传输错误、端口错误,执行端口复位、设备 Slot 重置,上报 PnP 子系统。

模块 5:PnP 与电源管理模块

  1. PnP:端口检测到设备插入,hub3.sys 完成复位、设备枚举;usbxhci 分配 Slot 槽位,填充设备 / 端点上下文。
  2. 链路电源管理:管理 USB 链路状态 U0 (工作)、U1/U2 (浅休眠)、U3 (挂起);支持 S3/S4 系统睡眠时 USB 设备远程唤醒。
  3. 系统睡眠 S3:usbxhci 保存硬件上下文;唤醒时恢复寄存器、上下文,恢复各个端点传输环状态。

二、依赖文件清单

内核驱动文件

文件 路径 说明
usbxhci.sys C:\Windows\System32\drivers\usbxhci.sys xHCI 硬件核心 FDO 驱动,KMDF 框架;操作 MMIO、TRB 环、中断处理Microsoft ...
ucx01000.sys System32\drivers USB 主机控制器 UCX 扩展层,抽象硬件接口,hub 驱动的统一对接层Microsoft ...
usbhub3.sys System32\drivers xHCI 根集线器驱动;端口管理、热插拔、复位、链路电源管理
pci.sys System32\drivers PCI 总线驱动;枚举 xHCI PCIe 设备,分配 MMIO、中断资源
wdf01000.sys System32\drivers KMDF 框架内核库;usbxhci、ucx 均基于 KMDF 开发

INF 驱动安装文件

  • usbxhci.inf:系统自带 xHCI 匹配 INF,匹配 PCI 设备硬件 ID;设备管理器USB xHCI Compliant Host Controller即由此 INF 安装。

上层配套驱动链

  1. usbccgp.sys:复合 USB 设备父驱动;
  2. 各类 USB 类驱动:usbstor.sys(U盘存储)、kbdclass.sys(键盘)、ndiswanusb.sys(USB网卡);
  3. usbport.sys / usbhub.sys:EHCI/OHCI/UHCI 旧 USB2.0/1.1 集线器驱动,xHCI 栈不再使用这套旧组件。

注册表存储

HKLM\SYSTEM\CurrentControlSet\Enum\PCI\
;存储xHCI PCI设备实例,硬件资源、驱动服务、PnP状态

HKLM\SYSTEM\CurrentControlSet\Services\UsbXhci
;usbxhci.sys服务项,启动类型、参数(调试、中断节流等)

三、完整逻辑调用链路

链路 1:设备上电 PnP 枚举链路

BIOS → PCIe控制器枚举xHCI硬件
 ↓pci.sys(PCI总线驱动)
  分配MMIO内存、MSI‑X中断资源;加载usbxhci.sys
   usbxhci.sys初始化硬件寄存器,分配命令环/事件环/DCBAAP上下文数组
   初始化MSI‑X中断;启动xHCI控制器硬件
   向上层枚举根集线器设备,加载usbhub3.sys
     usbhub3.sys轮询根端口状态,等待USB设备热插拔

链路 2:USB 数据收发完整 I/O 链路(U 盘读数据示例)

上层:usbstor.sys(USB存储驱动)构造URB传输请求
 ↓URB下发到 ucx01000.sys(UCX扩展层)
   UCX校验请求,KMDF队列转发 usbxhci.sys
     usbxhci.sys 将URB转换为TRB传输块,写入对应端点Transfer Ring
     写Doorbell门铃寄存器,通知硬件处理队列
     xHCI硬件DMA读取TRB,执行USB总线传输,DMA搬运数据
     传输完成,硬件写入Event‑TRB到事件环,触发MSI‑X中断
   CPU中断触发 → usbxhci.sys ISR处理事件环,解析完成状态
  回传完成状态向上,UCX完成URB回调
usbstor.sys收到数据,向上提交存储IO;应用层读取U盘数据。

链路 3:USB 设备热插拔链路

USB设备插入物理端口
 xHCI硬件检测端口状态变化,生成端口变更Event‑TRB写入事件环,触发中断
 usbxhci.sys中断处理,通知上层usbhub3.sys
   usbhub3.sys执行端口复位,USB标准枚举流程(获取设备描述符、配置描述符)
   usbxhci.sys分配设备Slot槽位,填充Slot/Endpoint上下文
   PnP管理器匹配对应USB设备驱动,加载设备堆栈。

四、配套链、上下游、版本演进

  1. 硬件规范版本
    • xHCI 1.0:USB3.0 Gen1 5Gbps;
    • xHCI 1.1:USB3.1 Gen2 10Gbps;
    • xHCI 1.2:USB3.2 Gen2x2 20Gbps;

xHCI 向下兼容 USB2.0/1.1 设备,不需要额外 EHCI 控制器硬件,硬件内部完成速率转换。

  1. Windows 系统版本配套
    • Win8 / Win8.1 / Win10 / Win11:系统自带usbxhci.sys原生驱动;
    • Win7:系统无内置 xHCI 驱动,需要芯片组厂商驱动包(Intel iusb3xhc.sys 第三方驱动);这就是 6 代以后 Intel 平台装 Win7 USB 全部失效的根源。
  2. 对比旧架构
    • UHCI/OHCI:USB1.1;EHCI:USB2.0;三套控制器需要三套独立驱动栈;1.1 设备通过 TT 集线器转发。
    • xHCI:单控制器,单驱动栈,统一全部速率。

五、典型故障坑点

  1. Win7 平台无 xHCI 原生驱动:新装 Win7 后 USB 全部失效,需要注入 Intel/AMD 厂商 xHCI 驱动包。
  2. MSI‑X 中断异常:BIOS 关闭 MSI‑X,xHCI 回退传统 INTx 中断,出现 USB 丢包、设备断连。
  3. 睡眠 S3 唤醒 USB 设备失效:xHCI 硬件上下文保存 / 恢复异常;BIOS 固件 bug、usbxhci.sys电源管理 bug。
  4. 设备频繁断连:TRB 环 DMA 内存污染、事件环溢出;USB3 线缆信号完整性问题;硬件端口 U3 挂起异常。
  5. 区分驱动栈:设备管理器看到USB xHCI Compliant Host Controller,代表使用现代 xHCI 栈(usbxhci.sys+ucx01000.sys);不是旧 EHCI (usb2.sys) 栈。
  6. 部分老 BIOS 存在 xHCI 模式切换选项:xHCI Mode [Auto/Enabled/Disabled];Disabled 模式会把端口路由到 EHCI,失去 USB3.x 能力。

六、演进时间线

  1. 2010:xHCI 1.0 规范正式发布;
  2. Win8:微软实现原生usbxhci.sys+UCX 驱动栈,KMDF 框架;
  3. 2013 xHCI1.1;2017 xHCI1.2;Windows 持续迭代 usbxhci.sys 适配新版本硬件;
  4. 现代 Intel/AMD 芯片组:完全移除 EHCI 硬件,整机 USB 全部由 xHCI 主控实现。

usbxhci.sys 拆解 解构

usbxhci.sys:Windows USB3.x 主机控制器驱动(xHCI 规范,Extensible Host Controller Interface),Ring0 内核驱动,负责 USB3.0/3.1/3.2 主机控制器硬件管理,是 USB3 总线的内核底层驱动。

区分:usbohci.sys (USB1.1)、usbuhci.sys (USB1.1)、usbehci.sys (USB2.0 EHCI);xhci 可以同时管理 USB2+USB3 设备(硬件支持)。

一、底层原理

xHCI 是可扩展 USB 主机控制器标准,usbxhci.sys 作为 Windows 下的主机控制器驱动,工作在总线驱动角色,对接 PCIe 上的 xHCI 硬件。 核心内部机制:

  1. 操作上下文 Context:设备上下文、输入上下文、输出上下文;硬件保存每个 USB 设备、端点状态,驻留在系统内存。
  2. 传输环 Transfer Ring:环形队列,存放 TRB(Transfer Request Block,传输请求块),取代旧 EHCI 的 TD。驱动填充 TRB,硬件消费 TRB 完成数据包收发。
  3. 命令环 Command Ring:下发硬件管理命令(设备复位、地址分配、配置端点)。
  4. 事件环 Event Ring:硬件完成任务后写事件,驱动 DPC 处理事件(传输完成、插拔、错误事件)。
  5. 中断模型:MSI/MSI-X(优先)或传统 INTx 中断;硬件触发中断,ntoskrnl 中断分发,驱动 ISR 快速处理,DPC 处理业务。
  6. PnP 电源管理:支持 D0/D1/D2/D3 电源状态,设备挂起、远程唤醒、选择性挂起 USB 选择性暂停。

工作核心思想:主机控制器硬件直接访问内存 TRB,硬件自主执行数据传输;驱动负责构建上下文、提交 TRB、处理硬件事件,不再由驱动逐包搬运数据。

二、依赖文件

文件 层级 角色
usbxhci.sys Ring0 xHCI 主机控制器主驱动
ntoskrnl.exe Ring0 内核核心,导出 Io/Mm/Ke/Ps/Ob 内核 API
hal.dll Ring0 HAL,中断、寄存器读写、硬件抽象
usbport.sys Ring0 USB 总线父驱动(USB Port Driver),PnP、USB 公共抽象层,usbxhci.sys 依附 usbport.sys
usbd.sys Ring0 USB 驱动栈通用库,USB 描述符解析、公用 USB 函数
pci.sys Ring0 PCI 总线驱动,枚举 PCI 设备,xHCI 控制器本身是 PCIe 设备
ci.dll Ring0 代码完整性,驱动签名校验
usbhub3.sys Ring0 xHCI 内置根 HUB 驱动,管理根端口插拔
ntdll.dll Ring3 用户态系统调用入口
winusb.sys / hidusb.sys / usbstor.sys Ring0 设备功能驱动(U 盘、键鼠等,加载在 USB 栈下层)

三、依赖关系

  1. usbxhci.sys 强依赖 usbport.sys:usbxhci 属于 USB 端口驱动的子驱动,注册为 USB 主机控制器,PnP、电源策略、公共 USB 接口由 usbport.sys 提供。
  2. 依赖 pci.sys:xHCI 控制器是 PCIe 设备;pci.sys 枚举 PCI 设备,分配 BAR 地址,使能硬件内存 / IO 空间,之后才加载 usbxhci.sys。
  3. 依赖 ntoskrnl + hal.dll:所有内核驱动基础依赖,内存分配、IRP、中断、自旋锁。
  4. usbxhci.sys 被上层 USB 驱动栈调用;下层对接硬件:
    • 向上:usbport.sys → usbhub3.sys → 设备功能驱动(usbstor/hidusb)
    • 向下:xHCI PCIe 硬件寄存器、DMA 内存
  5. usbxhci 不直接实现设备协议:HID、大容量存储等协议交给对应功能驱动;usbxhci 只做总线传输、端口管理。

四、配套链(完整 USB xHCI 驱动栈)

【Ring3 用户态】应用程序 → winusb.dll / hid.dll
    ↓
【Ring0 功能驱动】usbstor.sys / hidusb.sys / cdcacm.sys(设备类驱动)
    ↓
usbhub3.sys(根集线器驱动,处理端口插拔、上电复位)
    ↓
usbport.sys(USB总线公共层)
    ↓
usbxhci.sys(xHCI主机控制器驱动,TRB/命令环/事件环)
    ↓
pci.sys + hal.dll
    ↓
xHCI PCIe 硬件(南桥/PCH内置USB3控制器)

配套子系统:

  1. PnP 子系统:枚举控制器、端口、USB 设备,动态加载 / 卸载驱动。
  2. 电源管理子系统:选择性暂停、D3 冷休眠、远程唤醒。
  3. WMI:USB 事件、状态上报,供设备管理器读取信息。
  4. ETW:USB 内核事件跟踪,USB 性能 / 故障日志。

五、逻辑链路(两条链路:下发传输 + 硬件事件回调)

链路 1:用户下发 USB 数据传输(写 U 盘为例)

Ring3应用写文件 → NtWriteFile syscall
    ↓
ntoskrnl I/O管理器构建IRP
    ↓ IRP沿USB驱动栈下发
usbstor.sys(Bulk-Only存储)→ usbhub3 → usbport.sys
    ↓
usbxhci.sys:分配DMA内存,构建TRB,写入命令/传输环,通知硬件执行传输
    ↓
xHCI硬件DMA搬运内存数据,完成传输,写入事件环
    ↓
硬件触发MSI中断 → ntoskrnl中断分发 → usbxhci ISR → DPC
    ↓
DPC读取事件环,确认传输完成,调用IoCompleteRequest完成IRP
    ↓
内核通知Ring3应用:写入完成

链路 2:USB 设备热插拔(插入 U 盘)

USB设备插入物理端口
    ↓
硬件端口状态变化,触发中断
    ↓
usbxhci.sys ISR + DPC:上报端口变更事件给usbport.sys
    ↓
usbport.sys通知usbhub3.sys,执行端口复位、设备地址分配
    ↓
usbxhci分配设备上下文,读取设备描述符
    ↓
PnP管理器启动设备枚举,匹配加载usbstor.sys
    ↓
创建设备内核对象,生成设备节点,设备管理器出现U盘

六、边界

  1. 职责边界
    • usbxhci.sys:只管理 xHCI 主机控制器硬件、TRB 传输、端口状态、中断。不实现 USB 设备上层协议(HID、大容量、音频交给对应类驱动)。
    • 只处理 xHCI 硬件;USB2/1.1 由 EHCI/OHCI/UHCI 驱动处理(老平台);现代 xHCI 硬件兼容 USB2 设备,由 xhci 统一接管。
  2. 硬件边界
    • xHCI 依赖 PCIe BAR 内存空间;BIOS 必须开启 xHCI,若 BIOS 设置为 EHCI 模式,usbxhci 不会加载。
    • MSI/MSI-X 中断依赖主板 PCI 中断路由异常会导致 USB 掉线。
  3. 内存与 DMA 边界
    • xHCI 使用 DMA,TRB / 上下文必须位于物理连续或硬件可访问内存;受 VMM 内存保护。
    • 硬件直接读写内存,存在 DMA 攻击风险,现代平台 IOMMU 保护。
  4. 电源边界
    • USB 选择性挂起:usbxhci 可以单独将空闲端口进入低功耗;部分设备不兼容会出现断连。
    • D3 冷关机:断电后设备上下文丢失,唤醒需要重新初始化所有设备。
  5. 故障边界
    • TRB 环损坏、事件环溢出、控制器硬件错误 → usbxhci 触发重置端口 / 重置控制器;严重错误会蓝屏。
    • usbxhci 异常只影响 USB 总线,不会直接破坏 ntoskrnl 内核本身(除非池损坏)。
    • 驱动版本必须匹配芯片组固件;主板 PCH 固件 bug 是 USB 不稳定的常见根源,不是驱动 bug。
  6. 安全边界
    • usbxhci 属于内核驱动,需要驱动签名,DSE/CI 校验加载;
    • USB 设备的权限校验,依然由 ntoskrnl SRM 对象安全模型处理(设备对象 SD,SID+Token 四层校验),usbxhci 本身不做权限判定。

ucx01000.sys 拆解 解构

ucx01000.sys(简称 UCX,USB Host Controller Extension,USB 主机控制器扩展)Ring0 内核 KMDF 类扩展驱动,Windows10/11 USB3.x 驱动栈核心抽象层。

定位:隔离上层 usbhub3.sys 与底层硬件控制器驱动(usbxhci.sys),统一 URB、PnP、电源管理接口,支持多种 USB 主机控制器客户端驱动(xHCI、第三方自定义控制器)。

本质:KMDF Class Extension(框架类扩展),usbxhci.sys 是 UCX 的客户端驱动。

一、底层原理

UCX 作为通用抽象中间层,把 USB 主机控制器能力封装成统一对象模型,屏蔽不同硬件控制器实现差异。

  1. UCX 对象模型:创建控制器对象、根集线器对象、端口对象、端点对象、传输队列对象;维护引用计数、状态。
  2. URB 请求路由与排队:上层下发 URB(USB 请求块),UCX 校验请求合法性,按端点路由到 KMDF 队列,排队下发给客户端驱动 usbxhci.sys。
  3. 双向回调模型:UCX 向上暴露统一 API 给 usbhub3;向下通过回调函数(EVT_UCX_xxx)通知 usbxhci 处理硬件动作;硬件事件由 usbxhci 回调上报 UCX。
  4. PnP 与电源统一管理:集中处理设备枚举、启停、D 状态电源管理、选择性挂起、远程唤醒策略。
  5. 版本绑定校验:UCX 与客户端驱动版本强匹配;WDK 开发时客户端驱动链接ucx01000.lib存根库做接口转发。

核心思想:usbhub3.sys 只和 UCX 对话,不需要感知底层是 xHCI 或是其他类型 USB 控制器;底层硬件细节全部交给客户端驱动。

二、依赖文件

文件 运行层级 角色说明
ucx01000.sys Ring0 UCX 主机控制器扩展主驱动(KMDF 类扩展)
ntoskrnl.exe Ring0 内核核心,导出 Io/Ke/Mm/Ob 内核 API
hal.dll Ring0 硬件抽象层,中断、寄存器底层封装
wdf01000.sys Ring0 KMDF 框架,UCX 基于 KMDF 类扩展实现
usbxhci.sys Ring0 UCX 客户端驱动(xHCI 硬件驱动)
usbhub3.sys Ring0 根集线器驱动,向上层发起 URB/PnP 请求,调用 UCX
pci.sys Ring0 PCI 总线驱动,枚举 xHCI PCIe 硬件,加载 usbxhci+ucx 栈
ci.dll Ring0 代码完整性,驱动签名校验
usbd.sys Ring0 USB 公共工具库,USB 描述符辅助解析
ntdll.dll Ring3 用户态系统调用入口

三、依赖关系

  1. ucx01000.sys 强依赖 wdf01000.sys(KMDF 框架),UCX 本身就是 KMDF Class Extension,无 WDF 无法运行。
  2. 向上:usbhub3.sys 依赖 UCX 统一接口,hub 驱动不直接调用 usbxhci,所有 USB 请求先进入 ucx01000。
  3. 向下:usbxhci.sys 作为 UCX 客户端,注册 EVT 回调给 UCX,由 UCX 调度;usbxhci 依赖 UCX 提供的对象与队列框架。
  4. 基础内核依赖:ntoskrnl + hal.dll,所有内核驱动基础依赖,IRP、内存、自旋锁、中断。
  5. 单向依赖链:usbhub3.sys → ucx01000.sys → usbxhci.sys → pci.sys → 硬件。

重要边界:UCX不直接访问硬件寄存器,硬件操作全部交给客户端 usbxhci。

四、配套链(完整 USB3.x 内核驱动栈)

【Ring3 用户态】应用程序 → winusb.dll / hid.dll / setupapi
    ↓
【Ring0 设备类驱动】usbstor.sys / hidusb.sys / cdcacm.sys(U盘、键鼠、USB串口)
    ↓
usbccgp.sys(复合设备父驱动)
    ↓
usbhub3.sys(根HUB驱动,端口管理、热插拔、设备枚举)
    ↓
ucx01000.sys(UCX抽象层:URB排队、PnP、电源、对象管理)
    ↓
usbxhci.sys(UCX客户端,xHCI硬件驱动,TRB/命令环/事件环)
    ↓
pci.sys + hal.dll
    ↓
xHCI PCIe硬件(PCH南桥USB3控制器)

配套子系统:

  1. PnP 管理器:控制器、端口、USB 设备动态枚举,加载 / 卸载驱动
  2. 电源管理器:USB 选择性暂停、D0/D3 电源状态、远程唤醒策略
  3. ETW USB 事件跟踪:UCX 上报传输、端口、电源事件用于调试
  4. WMI:设备状态、控制器信息,设备管理器读取展示
  5. SRM 安全子系统:USB 设备对象 ACL 权限校验(复用 ntoskrnl 安全校验链)

五、逻辑链路(两条核心链路:下发 URB 传输、端口事件回调)

链路 1:下发 USB 数据传输(写入 U 盘)

Ring3应用写文件 → NtWriteFile syscall
    ↓
ntoskrnl I/O管理器构建IRP → usbstor.sys生成URB
    ↓
usbhub3.sys 将URB发送到ucx01000.sys
    ↓
UCX校验URB,根据目标端点,放入对应KMDF队列
    ↓
UCX调用usbxhci注册的EVT回调,通知usbxhci处理传输
    ↓
usbxhci构建TRB,提交硬件传输环,硬件DMA执行传输
    ↓
硬件完成传输,触发MSI中断 → usbxhci ISR/DPC处理
    ↓
usbxhci回调UCX上报传输完成
    ↓
UCX完成URB,向上逐层IoCompleteRequest完成IRP
    ↓
通知Ring3应用:写入完成

链路 2:USB 设备热插拔(插入 U 盘)

设备插入 → xHCI硬件端口状态变更,硬件中断
    ↓
usbxhci ISR/DPC捕获端口事件,回调上报ucx01000
    ↓
UCX更新端口对象状态,通知上层usbhub3.sys
    ↓
usbhub3执行端口复位、读取设备描述符,发起设备枚举
    ↓
PnP管理器匹配加载usbstor.sys,创建设备PDO
    ↓
设备管理器出现U盘设备节点

六、边界

1. 职责边界

✅ ucx01000.sys 负责:

  • 统一 URB 校验、排队、路由;控制器 / 端口 / 端点对象生命周期管理
  • PnP、电源策略统一抽象;向上提供标准化 USB 主机接口
  • 客户端驱动回调调度、版本校验、请求排队管理

❌ ucx01000.sys不负责:

  • 不直接操作硬件寄存器、不管理 TRB / 硬件传输环(usbxhci 负责)
  • 不实现 USB 设备类协议(HID / 大容量存储交给上层类驱动)
  • 不做硬件中断底层处理,中断由 usbxhci 处理后向上回调 UCX

2. 架构边界

  • UCX 是中间抽象层,只存在于 USB3.x(xHCI)驱动栈;USB2.0 EHCI 栈不使用 ucx01000.sys,沿用旧 usbport.sys 架构。
  • UCX 支持多客户端:除微软 usbxhci,第三方厂商可以开发自定义主机控制器驱动接入 UCX 框架。

3. 故障边界

  • URB 队列死锁、队列溢出、UCX 对象引用泄漏,会造成 USB 设备卡死、无法枚举;严重触发蓝屏。
  • UCX 本身异常不会直接破坏硬件,故障范围局限在 USB 主机栈;其他系统不受影响。
  • UCX 与 usbxhci 版本不匹配,设备栈加载失败,USB3 端口全部失效。

4. 安全边界

  • ucx01000.sys 内核驱动,加载前经过 CI/DSE 驱动签名校验。
  • UCX本身不做访问权限校验;USB 设备对象的安全 ACL、SID+Token 四层校验,依然由 ntoskrnl SRM 完成。

5. 电源边界

  • UCX 集中管理 USB 选择性挂起策略,统一协调端口 D3 休眠;策略由 UCX 下发给 usbxhci 执行。
  • 远程唤醒事件:硬件唤醒信号由 usbxhci 捕获,回调 UCX,UCX 向上通知 hub 驱动。

usbhub3.sys 拆解 解构

usbhub3.sys:Windows 10/11 USB3.x 根集线器(Root Hub)内核驱动,Ring0,KMDF 驱动。

定位:UCX (ucx01000.sys) 上层驱动;负责 USB 根端口管理、集线器协议、设备热插拔、设备初始化、端口电源控制,是连接 UCX 主机控制器抽象层与 USB 设备类驱动的桥梁。

对应旧版:usbhub.sys(USB2.0 EHCI/OHCI/UHCI 集线器驱动),usbhub3.sys 仅用于 UCX/xHCI 架构。

一、底层原理

usbhub3.sys 实现 USB 3.x 集线器规范,作为 xHCI 根集线器的功能驱动,基于 KMDF 框架,对接 UCX 提供的标准化接口。

  1. 集线器端口对象管理:维护所有根端口状态(连接 / 断开、使能 / 复位、速度、电源状态、过载),每个端口独立状态机。
  2. USB 设备枚举流程:设备插入 → 端口上电、复位 → 获取设备描述符、配置描述符、分配 USB 地址,创建设备 PDO(物理设备对象)交给 PnP 管理器。
  3. URB 请求转发:接收上层类驱动下发的 URB,转发给 UCX;UCX 再调度底层 usbxhci 执行硬件传输。
  4. PnP 与端口电源管理:端口上电 / 断电、选择性挂起、远程唤醒配置、端口过载保护。
  5. 集线器事件上报:监听端口状态变更(插拔、过流、复位完成),向上通知 PnP,向下发起 USB 控制传输。
  6. 复合设备分支:复合 USB 设备会交由usbccgp.sys,usbhub3 负责初始枚举。

核心思想: usbhub3不直接操作硬件寄存器,所有底层传输、硬件中断都交给 UCX + usbxhci;usbhub3 专注USB 集线器协议、端口状态机、PnP 设备枚举。

二、依赖文件

文件 层级 角色说明
usbhub3.sys Ring0 USB3 根集线器主驱动
ntoskrnl.exe Ring0 内核核心,Io/Ke/Mm/Ob 等内核 API
hal.dll Ring0 硬件抽象层,中断、寄存器底层封装
wdf01000.sys Ring0 KMDF 框架,usbhub3 基于 KMDF 开发
ucx01000.sys Ring0 UCX 主机控制器扩展,usbhub3 向下调用 UCX 接口、提交 URB
usbxhci.sys Ring0 UCX 客户端 xHCI 硬件驱动(间接依赖,通过 UCX 隔离)
usbd.sys Ring0 USB 通用库,USB 描述符解析、USB 标准请求辅助函数
pci.sys Ring0 PCI 总线驱动,枚举 xHCI PCI 控制器
ci.dll Ring0 代码完整性,驱动签名 DSE 校验
usbccgp.sys Ring0 复合 USB 设备父驱动(hub 枚举到复合设备时加载)
usbstor.sys / hidusb.sys Ring0 USB 设备类驱动(枚举成功后 PnP 加载)
ntdll.dll Ring3 用户态系统调用入口

三、依赖关系

  1. usbhub3.sys 强依赖 wdf01000.sys(KMDF),基于 WDF 设备对象、WDF 队列管理 IRP/URB。
  2. 向下强依赖 ucx01000.sys:usbhub3 所有 USB 传输(控制传输、端口状态查询)都提交 URB 到 UCX;usbhub3 不直接调用 usbxhci,UCX 做中间隔离。
  3. 向上:PnP 管理器依赖 usbhub3,由 usbhub3 发现端口上的 USB 设备,生成 PDO 上报 PnP,匹配加载对应设备类驱动。
  4. 基础依赖 ntoskrnl + hal.dll:IRP、内存分配、自旋锁、内核对象引用计数。
  5. 依赖 usbd.sys:解析设备 / 配置 / 接口描述符,构造标准 USB 控制请求。

单向依赖链: 设备类驱动(usbstor/hidusb) → usbccgp.sys(复合设备) → usbhub3.sys → ucx01000.sys → usbxhci.sys → pci.sys → xHCI硬件

四、配套链(完整 USB3.x 内核驱动栈)

【Ring3 用户态】应用程序 → winusb.dll / hid.dll / setupapi.dll
    ↓
【Ring0 设备类驱动】usbstor.sys / hidusb.sys / cdcacm.sys
    ↓
usbccgp.sys(复合USB设备父驱动,多接口拆分)
    ↓
usbhub3.sys(根集线器驱动:端口管理、设备枚举、集线器协议)
    ↓
ucx01000.sys(UCX抽象层:URB排队、PnP、电源抽象)
    ↓
usbxhci.sys(UCX客户端,xHCI硬件驱动,TRB/命令环/事件环)
    ↓
pci.sys + hal.dll
    ↓
xHCI PCIe硬件(PCH南桥USB3控制器)

配套子系统:

  1. PnP 管理器:接收 usbhub3 上报的 PDO,匹配、加载设备功能驱动
  2. 电源管理器:端口 D 状态、选择性暂停、远程唤醒协同
  3. ETW USB 跟踪:上报端口插拔、复位、枚举失败事件,用于排障
  4. WMI:集线器 / 端口状态,设备管理器读取展示
  5. SRM 安全子系统:USB 设备对象 ACL、SID+Token 四层权限校验(ntoskrnl SRM)

五、逻辑链路(2 条核心链路:设备枚举、USB 数据传输)

链路 1:USB 设备热插拔枚举(U 盘插入)

物理设备插入 → xHCI硬件端口变更中断
    ↓
usbxhci ISR/DPC → 回调 ucx01000 → UCX通知 usbhub3.sys
    ↓
usbhub3:端口上电、发送USB复位,等待设备上线
    ↓
usbhub3下发URB(控制传输)读取设备描述符、分配USB地址
    ↓
读取配置描述符;若是复合设备,PnP加载usbccgp.sys
    ↓
usbhub3创建设备PDO,上报PnP管理器
    ↓
PnP匹配硬件ID,加载usbstor.sys
    ↓
设备节点在设备管理器出现

链路 2:业务数据传输(U 盘写入)

Ring3应用 NtWriteFile → ntoskrnl I/O管理器构建IRP
    ↓
usbstor.sys(Bulk-Only存储)生成Bulk传输URB
    ↓
usbccgp.sys(复合设备)转发 → usbhub3.sys接收URB
    ↓
usbhub3把URB提交给ucx01000.sys
    ↓
UCX排队URB,调用usbxhci回调构建TRB、硬件DMA传输
    ↓
传输完成,硬件事件回调,逐层向上完成URP/IRP
    ↓
通知用户态写入完成

六、边界

1. 职责边界

✅ usbhub3.sys 负责:

  • 根端口状态机、端口上电 / 复位 / 过流检测
  • USB 标准控制传输、设备描述符读取、设备枚举、生成 PDO 上报 PnP
  • 集线器电源策略、选择性挂起、远程唤醒配置
  • URB 转发,设备插入移除事件上报

❌ usbhub3.sys不负责:

  • 不直接访问 xHCI 硬件寄存器、不操作 TRB 传输环(交给 UCX/usbxhci)
  • 不实现设备类协议(存储、HID、音频由 usbstor/hidusb 等类驱动处理)
  • 不实现 PCI 总线枚举,PCI 设备枚举由 pci.sys 完成

2. 架构边界

  • usbhub3 仅在UCX+xHCI USB3 栈使用;USB2 EHCI 架构使用旧版usbhub.sys,二者不能混用。
  • usbhub3 只处理根集线器;外接独立 USB HUB(外接扩展集线器)使用usbhub.sys。

3. 故障边界

  • 端口枚举失败、描述符读取超时、复位失败:usbhub3 标记端口错误,PnP 报黄色感叹号;不会直接蓝屏。
  • URB 队列卡死、KMDF 对象泄漏,会造成端口设备无法识别、插拔无响应;极端池损坏触发蓝屏。
  • 故障隔离:单个端口故障,usbhub3 可单独重置该端口,不会影响其他 USB 端口。

4. 电源边界

  • usbhub3 负责发起端口选择性挂起请求,请求传递到 UCX,由 usbxhci 执行硬件低功耗动作。
  • 远程唤醒:设备发送唤醒信号 → xHCI 硬件中断 → 向上传递到 usbhub3,唤醒端口。

5. 安全边界

  • usbhub3 内核驱动,加载前经过 CI/DSE 驱动签名校验。
  • usbhub3不实现访问权限校验;USB 设备对象的安全描述符、SID/Token 四层校验,全部由 ntoskrnl SRM 完成。

usbccgp.sys 拆解 解构

usbccgp.sys:USB 复合设备通用父驱动(USB Common Generic Parent Driver),Ring0 KMDF 内核驱动。

定位:复合 USB 设备的拆分代理。一个 USB 硬件设备拥有多个独立接口(例如:带键盘 + 声卡 + U 盘的多功能 USB 设备),usbccgp 接收 hub 上报的单一设备 PDO,拆分成多个子接口 PDO,供 PnP 分别加载不同的类驱动(HID / 音频 / 存储等)。

复合设备:硬件只有一个 USB 设备地址,但包含多个独立功能接口;若无 usbccgp,PnP 只会加载一个驱动,无法拆分多功能。

一、底层原理

  1. 复合设备识别:usbhub3 上报设备后,PnP 加载 usbccgp;读取 USB 配置描述符,识别Interface Association Descriptor(IAD),判定为复合设备。
  2. 接口拆分与子 PDO 生成:解析所有独立接口,为每一个接口创建子物理设备对象(子 PDO),上报 PnP 管理器。
  3. URB 转发与路由:子接口驱动(hidusb、usbstor)下发 URB,usbccgp 做路由转发,将多个子接口的 URB 复用到底层唯一 USB 设备通道;向上隔离多接口,向下对外只呈现一个 USB 设备。
  4. PnP 与电源代理:统一管理父设备 PnP、电源状态,同步所有子接口设备 D 状态;父设备挂起 / 唤醒,同步所有子接口。
  5. 接口状态管理:跟踪每个子接口的引用计数;子接口全部关闭,才允许底层设备进入低功耗。

核心思想:硬件上 1 个 USB 设备,逻辑上拆成多个独立子设备;usbccgp 充当中间代理,多路 URB 复用同一条 USB 总线通道。

二、依赖文件

文件 层级 角色说明
usbccgp.sys Ring0 USB 复合设备通用父驱动主程序
ntoskrnl.exe Ring0 内核核心,Io/Ke/Mm/Ob 内核 API
hal.dll Ring0 硬件抽象层,中断底层封装
wdf01000.sys Ring0 KMDF 框架,usbccgp 基于 KMDF 开发
usbhub3.sys Ring0 上层,提供复合设备父 PDO,提交 URB 向下传输
ucx01000.sys Ring0 UCX 抽象层,URB 排队、电源管理
usbxhci.sys Ring0 xHCI 硬件驱动,硬件 TRB 传输
usbd.sys Ring0 USB 工具库,解析 USB 各类描述符
ci.dll Ring0 代码完整性,DSE 驱动签名校验
hidusb.sys / usbstor.sys / usbaudio.sys Ring0 子接口对应的功能类驱动(子 PDO 加载)
ntdll.dll Ring3 用户态系统调用入口

三、依赖关系

  1. usbccgp.sys 强依赖 wdf01000.sys(KMDF),依靠 WDF 设备对象、队列管理 IRP/URB。
  2. 向上:PnP 管理器加载 usbccgp;usbccgp 生成子 PDO,PnP 基于子 PDO 加载 hidusb/usbstor 等子驱动。
  3. 向下依赖 usbhub3.sys:usbccgp 所有 URB 请求下发给 usbhub3,不直接调用 UCX/usbxhci。
  4. 基础依赖 ntoskrnl + hal.dll:IRP、内存分配、自旋锁、内核对象生命周期。
  5. 依赖 usbd.sys:解析 IAD、接口描述符,识别复合设备的多接口信息。

单向依赖链: 子接口类驱动(hidusb/usbstor) → usbccgp.sys → usbhub3.sys → ucx01000.sys → usbxhci.sys → pci.sys → xHCI硬件

四、配套链(完整 USB3.x 内核驱动栈,复合设备场景)

【Ring3 用户态】应用程序 → winusb.dll / hid.dll / setupapi.dll
    ↓
【Ring0 子接口类驱动】usbstor.sys / hidusb.sys / usbaudio.sys
    ↓
usbccgp.sys(复合设备父驱动:多接口拆分、子PDO生成、URB多路复用)
    ↓
usbhub3.sys(根集线器驱动,端口管理、设备枚举)
    ↓
ucx01000.sys(UCX抽象层:URB排队、PnP、电源抽象)
    ↓
usbxhci.sys(UCX客户端,xHCI硬件驱动,TRB/命令环/事件环)
    ↓
pci.sys + hal.dll
    ↓
xHCI PCIe硬件(PCH南桥USB3控制器)

配套子系统:

  1. PnP 管理器:接收 usbccgp 上报的子 PDO,匹配硬件 ID 加载对应子接口驱动
  2. 电源管理器:usbccgp 统一协调父设备与全部子接口 D 状态、选择性挂起
  3. ETW USB 跟踪:上报复合设备枚举、子 PDO 创建、URB 转发事件
  4. WMI:复合设备、子接口状态在设备管理器展示
  5. SRM 安全子系统:每个子 PDO 都拥有独立安全描述符,复用 ntoskrnl SRM 四层权限校验

五、逻辑链路(2 条核心链路:复合设备枚举、子接口数据传输)

链路 1:复合 USB 设备枚举(例如:带 HID 键盘 + U 盘的多功能 USB 设备)

设备插入 → xHCI硬件端口中断
    ↓
usbxhci → ucx01000 → usbhub3.sys,执行端口复位,读取设备描述符
    ↓
PnP识别此为复合设备,加载 usbccgp.sys
    ↓
usbccgp 通过usbd库解析IAD/接口描述符,识别多个独立功能接口
    ↓
usbccgp 为每一个接口创建独立子PDO,上报PnP管理器
    ↓
PnP按子接口硬件ID,分别加载 hidusb.sys(键盘)、usbstor.sys(U盘)
    ↓
设备管理器出现两个独立设备节点:HID键盘 + U盘存储

链路 2:子接口业务传输(向复合设备内的 U 盘写入数据)

Ring3应用 NtWriteFile → ntoskrnl I/O管理器构建IRP
    ↓
usbstor.sys生成Bulk URB,提交到usbccgp子接口通道
    ↓
usbccgp路由URB,复用到底层唯一USB设备管道,转发给usbhub3.sys
    ↓
usbhub3提交URB到ucx01000,UCX排队
    ↓
usbxhci构建TRB,硬件DMA传输
    ↓
传输完成,硬件中断回调,逐层向上完成URB/IRP
    ↓
通知用户态写入完成

六、边界

1. 职责边界

✅ usbccgp.sys 负责:

  • 识别复合设备 IAD 描述符,拆分多接口、创建多个子 PDO
  • 子接口 URB 路由与多路复用,多个子接口共享同一个底层 USB 设备
  • 代理 PnP、电源管理,同步父设备和所有子接口状态
  • 子接口引用计数管理,控制设备休眠条件

❌ usbccgp.sys不负责:

  • 不操作硬件寄存器、不处理 TRB,硬件传输交给下层 usbhub3/UCX/usbxhci
  • 不实现设备类协议(HID、存储、音频由子接口驱动实现)
  • 非复合 USB 设备不会加载 usbccgp(普通单接口 U 盘直接加载 usbstor,跳过 usbccgp)

2. 架构边界

  • usbccgp 同时兼容 USB2(usbhub.sys)和 USB3(usbhub3.sys)两套 USB 栈。
  • 仅存在带 IAD 描述符的复合设备才触发加载;老复合设备无 IAD,不使用 usbccgp。
  • 一个父 PDO 对应一个 usbccgp 实例;每个子接口独立 PDO,拥有独立硬件 ID、独立安全对象。

3. 故障边界

  • 某个子接口故障:usbccgp 可单独停止该子接口,不影响其他子接口正常工作。
  • 描述符解析异常、IAD 损坏:usbccgp 无法生成子 PDO,PnP 报黄色感叹号,整个复合设备功能失效。
  • URB 队列阻塞、KMDF 对象泄漏,会造成全部子接口卡死;极端内核池损坏触发蓝屏。

4. 电源边界

  • 父设备进入 D3 休眠:usbccgp 需要等待所有子接口全部释放引用,才允许下发底层挂起请求。
  • 任意子接口有 IO 在运行,usbccgp 阻止父设备进入选择性挂起。
  • 远程唤醒由底层 hub 上报,usbccgp 同步唤醒全部子接口。

5. 安全边界

  • usbccgp 内核驱动,加载前经过 CI/DSE 驱动签名校验。
  • usbccgp 本身不做权限校验;每个子 PDO 独立 SD,访问子接口对象时,由 ntoskrnl SRM 执行 SID+Token 四层校验。

usbstor.sys 拆解 解构

usbstor.sys:USB 大容量存储类内核驱动(USB Mass Storage Class Driver),Ring0 KMDF 驱动。

定位:USB 存储设备类驱动,实现 USB MSC(Mass Storage Class)Bulk-Only Transport(BOT)协议,将 SCSI 命令封装在 USB 的 Bulk 端点 URB 中;对上模拟 SCSI 磁盘设备,对接 Windows 存储栈 disk.sys。 典型设备:U 盘、移动硬盘、USB 读卡器、USB 固态移动盘。

一、底层原理

  1. SCSI 命令封装 / 解封装(BOT Bulk-Only Transport) 上层 disk.sys 下发 SCSI CDB 命令,usbstor 把 CDB 打包成 BOT 协议的 CBW(Command Block Wrapper),放入 Bulk OUT 端点 URB 下发给 USB 设备;设备返回 CSW(Command Status Wrapper)确认命令执行结果。
  2. SCSI 设备模拟 usbstor 对外暴露 SCSI 逻辑单元(LUN),创建 SCSI PDO,对接 Windows 存储栈 disk.sys。Windows 存储子系统认为这是一个 SCSI 磁盘,屏蔽底层 USB 传输细节。
  3. URB 管理 构造 USB 请求块 URB,下发给下层 USB 驱动栈(usbccgp /usbhub3);处理 Bulk IN/OUT 数据传输、命令超时、复位恢复逻辑。
  4. LUN 管理 支持多 LUN 设备(多合一读卡器,一个 USB 设备包含 SD、TF 多个 LUN 磁盘),为每个 LUN 生成独立 SCSI 子 PDO。
  5. 错误恢复机制 BOT 传输失败时,执行批量端点复位、设备复位;严重错误会重置整个 USB 设备通道。

核心思想:usbstor 是协议转换层:上层 SCSI 存储命令 ↔ 底层 USB Bulk 传输;把 USB 闪存盘伪装成 SCSI 磁盘接入系统存储栈。

二、依赖文件

文件 层级 角色说明
usbstor.sys Ring0 USB 大容量存储类主驱动
ntoskrnl.exe Ring0 内核核心,Io/Ke/Mm/Ob 内核 API
hal.dll Ring0 硬件抽象层
wdf01000.sys Ring0 KMDF 框架,usbstor 基于 KMDF 开发
usbccgp.sys Ring0 复合设备父驱动(多功能设备场景);单接口 U 盘直接对接 usbhub3
usbhub3.sys Ring0 USB3 根集线器驱动,接收 URB 向下转发
ucx01000.sys Ring0 UCX 主机控制器抽象层
usbxhci.sys Ring0 xHCI 硬件驱动,TRB 硬件传输
disk.sys Ring0 Windows 磁盘驱动,usbstor 向上提供 SCSI 逻辑单元,disk.sys 创建磁盘设备对象
scsiport.sys Ring0 SCSI 端口库,SCSI 命令、LUN 管理基础库
usbd.sys Ring0 USB 公共库,USB 描述符、URB 辅助工具函数
ci.dll Ring0 代码完整性,DSE 驱动签名校验
ntdll.dll Ring3 用户态系统调用入口

三、依赖关系

  1. usbstor.sys 强依赖 wdf01000.sys(KMDF)与 scsiport.sys:基于 SCSI 端口框架对外模拟 SCSI 设备。
  2. 向上:disk.sys 依赖 usbstor;usbstor 创建 SCSI LUN PDO,disk.sys 绑定该 PDO,生成磁盘设备,挂载到存储管理器。
  3. 向下:usbstor 下发 URB:复合设备走 usbccgp;普通单接口 U 盘直接下发给 usbhub3。usbstor 不直接调用 UCX/usbxhci。
  4. 基础依赖 ntoskrnl + hal.dll:IRP、内存、自旋锁、内核对象管理。
  5. 依赖 usbd.sys:解析 USB 设备描述符、端点描述符,识别 Bulk IN/OUT 端点。

单向依赖链: Ring3文件系统(ntfs.sys) → disk.sys → usbstor.sys → usbccgp.sys(可选) → usbhub3.sys → ucx01000.sys → usbxhci.sys → pci.sys → xHCI硬件

四、配套链(USB3 U 盘完整内核驱动栈)

【Ring3 用户态】资源管理器 / 应用程序
    ↓
ntfs.sys / fastfat.sys(文件系统)
    ↓
disk.sys(磁盘驱动,分区识别、磁盘设备对象)
    ↓
usbstor.sys(USB MSC BOT协议转换:SCSI ↔ USB Bulk)
    ↓
usbccgp.sys(复合设备可选,多功能读卡器场景)
    ↓
usbhub3.sys(根集线器、端口管理)
    ↓
ucx01000.sys(UCX抽象层、URB排队)
    ↓
usbxhci.sys(xHCI硬件驱动,TRB、DMA传输)
    ↓
pci.sys + hal.dll
    ↓
xHCI PCIe硬件 + USB存储硬件(U盘)

配套子系统:

  1. PnP 管理器:usbstor 上报 SCSI LUN PDO,disk.sys 绑定,生成磁盘设备节点
  2. 存储管理器:读取分区表,生成盘符
  3. ETW:USB 传输、BOT 命令、超时、复位事件跟踪
  4. WMI:U 盘状态、容量信息上报设备管理器
  5. SRM 安全子系统:磁盘设备对象 SD,复用 ntoskrnl SRM 四层权限校验

五、逻辑链路(2 条核心链路:U 盘枚举、文件写入)

链路 1:USB 存储设备枚举(插入 U 盘)

U盘插入物理端口 → xHCI硬件端口中断
    ↓
usbxhci → ucx01000 → usbhub3,端口复位、读取USB描述符
    ↓
PnP匹配硬件ID,加载 usbstor.sys
    ↓
usbstor通过BOT协议发送SCSI Inquiry命令,查询设备型号、LUN数量
    ↓
usbstor为每个LUN创建SCSI子PDO,上报PnP
    ↓
disk.sys绑定LUN PDO,读取分区表
    ↓
存储管理器分配盘符,资源管理器出现U盘

链路 2:向 U 盘写入文件(业务 IO)

Ring3应用写文件 → NtWriteFile syscall → ntfs.sys
    ↓
disk.sys将文件IO转换为SCSI Write(10) CDB命令,下发给usbstor
    ↓
usbstor封装CDB为CBW,构造Bulk OUT URB,下发下层USB栈
    ↓
usbccgp(可选)→ usbhub3 → ucx01000 → usbxhci,构建TRB,硬件DMA传输
    ↓
U盘硬件收到CBW,执行写操作,返回CSW状态包
    ↓
硬件中断,逐层回调完成URB
    ↓
usbstor解析CSW,确认SCSI命令成功,向上完成SCSI IRP
    ↓
disk.sys/文件系统通知用户态写入完成

六、边界

1. 职责边界

✅ usbstor.sys 负责:

  • 实现 USB MSC Bulk-Only 传输协议,CBW/CSW 封装解析
  • SCSI 命令翻译,模拟 SCSI LUN,对接 disk.sys 存储栈
  • URB 构造、Bulk 端点 IO、命令超时、端点复位、设备错误恢复
  • 多 LUN 管理(多卡读卡器)

❌ usbstor.sys不负责:

  • 不操作 xHCI 硬件寄存器,不管理 TRB(交给下层 USB 栈)
  • 不实现文件系统(NTFS/FAT 交给 ntfs.sys/fastfat.sys)
  • 不处理磁盘分区解析,分区识别交给 disk.sys
  • 不处理 USB 集线器端口上电复位(usbhub3 负责)

2. 架构边界

  • usbstor 同时兼容 USB2(usbhub.sys)与 USB3(usbhub3.sys)两套 USB 驱动栈。
  • 仅 MSC 存储设备加载 usbstor;USB UASP 协议的固态 U 盘,使用uaspstor.sys,不走 usbstor。

3. 故障边界

  • BOT 命令超时、CSW 状态错误:usbstor 自动尝试端点复位;多次失败触发设备重置,U 盘脱机。
  • 单 LUN 故障不会影响同设备其他 LUN(多合一读卡器)。
  • URB 队列卡死、KMDF 对象泄漏:U 盘无响应;严重内存池损坏触发蓝屏。
  • 固件异常 U 盘会频繁触发 usbstor 复位,出现 U 盘反复断开重连。

4. 电源边界

  • usbstor 参与设备电源管理,向 USB 栈发起选择性挂起请求;IO 活跃时阻止 D3 休眠。
  • 远程唤醒:设备唤醒信号由底层 hub 上报,usbstor 恢复 SCSI IO 队列。

5. 安全边界

  • usbstor 内核驱动,加载前经过 CI/DSE 驱动签名校验。
  • usbstor 本身不实现权限判定;磁盘设备对象 ACL、SID+Token 四层校验,全部由 ntoskrnl SRM 完成。

usbd.sys 拆解 解构

usbd.sys:USB Driver Library,USB 内核通用支持库(非独立设备驱动,内核态 USB 工具库),Ring0。

定位:为 USB 全栈驱动(usbhub3、usbccgp、usbstor、hidusb 等)提供标准化 USB 底层工具函数、描述符解析、URB 辅助构建、USB 常量与数据结构。本身不创建设备 PDO,不直接和硬件交互,属于 USB 栈公共底层工具库。

一、底层原理

  1. USB 标准描述符解析 解析 USB 设备描述符、配置描述符、接口、端点、IAD、字符串描述符;校验描述符长度、字段合法性,提取设备 VID/PID、端点类型 / 最大包长。
  2. URB 辅助构造与销毁 提供 API 分配、初始化、克隆、释放 URB(USB Request Block),填充标准控制传输 URB,简化各 USB 驱动的 URB 编码工作。
  3. USB 标准请求封装 封装GET_DESCRIPTOR、SET_ADDRESS、SET_CONFIGURATION等 USB 2.0/3.x 标准控制请求,上层驱动直接调用,无需手动组装 Setup 包。
  4. USB 公用数据结构与常量 提供 USB 规范定义的结构体、状态码、传输类型(控制 / 批量 / 中断 / 同步)、速度定义(LS/FS/HS/SS)。
  5. 辅助校验与工具函数 端点能力校验、包大小计算、USB 状态码转换、调试 ETW 事件辅助输出。

核心思想:usbd.sys 是 USB 驱动栈的公共基础 SDK,把 USB 协议的基础编码、解析逻辑抽离为公共库,所有 USB 类驱动复用,避免重复开发相同代码。usbd 本身不发起 IRP/URB 传输,仅提供工具函数。

二、依赖文件

文件 层级 角色说明
usbd.sys Ring0 USB 通用工具库
ntoskrnl.exe Ring0 内核核心,Io/Ke/Mm/Ob 内核 API,内存分配、自旋锁
hal.dll Ring0 硬件抽象层
wdf01000.sys Ring0 KMDF 框架,内存对象辅助管理
ci.dll Ring0 代码完整性,驱动签名校验
ucx01000.sys / usbhub3.sys / usbccgp.sys / usbstor.sys Ring0 使用者,调用 usbd 导出 API
ntdll.dll Ring3 用户态系统调用入口

三、依赖关系

  1. usbd.sys 基础依赖 ntoskrnl + hal.dll + wdf01000.sys,依赖内核内存管理、WDF 内存对象。
  2. 被动被依赖:usbhub3、usbccgp、usbstor、hidusb、usbaudio 等 USB 驱动调用 usbd 导出函数;usbd 不会主动调用这些驱动,单向:业务驱动 → usbd.sys。
  3. 无 PnP 设备实例:usbd.sys 加载到内核,但不绑定任何硬件设备、不生成 PDO/FDO,不是设备功能驱动。
  4. 不依赖 UCX/usbxhci 硬件驱动:usbd 只做协议数据解析,完全不涉及硬件寄存器、TRB、中断。

单向调用关系: usb类驱动(usbstor/hidusb/usbhub3) → usbd.sys(工具库)

四、配套链(在 USB3 完整驱动栈中的位置)

【Ring3 用户态】应用程序
    ↓
【Ring0 功能类驱动】usbstor.sys / hidusb.sys / usbaudio.sys
    ↓(调用usbd接口,解析描述符、生成URB)
usbd.sys(USB公共工具库,仅提供函数)
    ↓
usbccgp.sys(复合设备可选)
    ↓
usbhub3.sys(根集线器)
    ↓
ucx01000.sys(UCX抽象层)
    ↓
usbxhci.sys(xHCI硬件驱动)
    ↓
pci.sys + hal.dll
    ↓
xHCI PCIe硬件

配套子系统:

  1. PnP 管理器:usbd 不参与 PnP 枚举,是上层驱动在 PnP 枚举阶段调用 usbd 读取设备描述符
  2. ETW:usbd 内置 USB 通用事件输出,用于 USB 栈调试跟踪
  3. WMI:不直接提供 WMI,由调用它的驱动上报设备信息
  4. SRM 安全子系统:usbd不参与权限校验,权限判定由 ntoskrnl SRM 处理

五、逻辑链路(两条典型调用链路:设备枚举描述符读取、URB 构造)

链路 1:设备枚举阶段,usbhub3 调用 usbd 解析 USB 描述符

USB设备插入,usbhub3准备发起GET_DESCRIPTOR控制请求
    ↓
usbhub3调用usbd API,构建控制传输URB
    ↓
URB下发USB栈,获取设备返回的原始描述符二进制数据
    ↓
usbhub3调用usbd解析原始二进制缓冲区,提取设备VID/PID、端点信息
    ↓
识别设备类型,上报PnP管理器

链路 2:usbstor.sys 调用 usbd 构建标准 USB 控制请求

usbstor需要发送USB标准SET_CONFIGURATION请求
    ↓
usbstor调用usbd库函数,自动填充Setup包,生成URB
    ↓
usbstor将URB下发到下层USB驱动栈执行传输
    ↓
硬件传输完成,返回状态,usbstor处理结果

关键点:usbd不会发送 URB,它只帮你把 URB 结构体填好;发送 URB 是上层驱动负责向下提交。

六、边界

1. 职责边界

✅ usbd.sys 负责:

  • USB 描述符二进制解析、校验
  • URB 分配、初始化、释放辅助 API
  • USB 标准控制请求 Setup 包组装
  • USB 协议常量、结构体定义、辅助计算函数

❌ usbd.sys不负责:

  • 不创建 FDO/PDO,不是设备驱动,不参与 PnP 设备栈构建
  • 不发起任何 IRP、URB 传输;不处理中断、DMA、TRB
  • 不实现 USB 设备类协议(BOT/HID/ 音频,交给 usbstor/hidusb)
  • 不做电源管理、端口复位、热插拔事件处理

2. 架构边界

  • usbd.sys 同时支持 USB1.1/2.0/3.x;旧 EHCI 栈、新 UCX/xHCI 栈共用同一份 usbd。
  • usbd 属于库驱动,可以被多个 USB 驱动同时调用,多实例共享。
  • 区分:usbd.sys(内核 USB 库)≠ usb.dll(用户态 Win32 USB API)。

3. 故障边界

  • usbd 解析描述符出错:返回错误给调用方;由上层驱动决定如何处理(标记设备异常)。
  • usbd 内存 API 泄漏:会造成内核内存池泄漏,但故障不会直接触发蓝屏,极端情况才崩溃。
  • usbd 本身无硬件交互,usbd 异常不会直接导致 USB 硬件掉线,只会让调用它的驱动无法解析描述符、无法构造 URB,设备枚举失败。

4. 电源边界

usbd完全不参与电源管理,D 状态、选择性挂起由 hub/UCX/ 类驱动处理。

5. 安全边界

  • usbd 内核库,加载经过 CI/DSE 驱动签名校验。
  • usbd 只做数据解析,不做 SID、ACL、访问控制校验;安全校验仍然由 ntoskrnl SRM 四层校验引擎完成。

usbhub.sys 拆解 解构

usbhub.sys:Windows USB2.0 EHCI 架构的 USB 根集线器 / 外接集线器内核驱动,Ring0 KMDF 驱动。

定位:USB2.0 EHCI 栈的集线器驱动,对应 USB3.x 栈的usbhub3.sys;负责 USB2 端口状态机、设备热插拔、端口电源、枚举初始化。

适用:EHCI 控制器的根 HUB,以及外接独立 USB2 扩展 HUB 设备;USB3 xHCI 架构不使用 usbhub.sys。

一、底层原理

  1. 集线器端口状态机管理 维护每个 USB2 端口状态:断开 / 已连接、上电、复位、速度识别(FullSpeed/HighSpeed/LowSpeed)、过流保护、挂起 / 远程唤醒。实时监听端口状态变更事件。
  2. USB 设备枚举流程 设备插入 → 端口上电 + 复位 → 下发GET_DESCRIPTOR控制传输读取设备描述符、分配 USB 地址、读取配置描述符;生成 PDO 上报 PnP 管理器。
  3. URB 请求转发 接收上层类驱动(usbstor/hidusb)下发 URB,转发给下层usbport.sys;usbhub 本身不做硬件传输,仅负责集线器协议层面控制传输。
  4. PnP 与电源管理 端口上电 / 断电、选择性挂起、远程唤醒配置;跟踪端口 IO 引用计数,判断端口是否允许进入 D3 低功耗。
  5. 集线器标准协议处理 实现 USB2.0 HUB 类规范:端口状态查询、过流检测、端口复位、集线器描述符读取。

核心思想: usbhub.sys 是 USB2 集线器协议实现层,不直接操作 EHCI 硬件寄存器;硬件交互交给 usbport + usbehci。只专注端口状态机、设备枚举、HUB 标准控制请求。

二、依赖文件

文件 层级 角色说明
usbhub.sys Ring0 USB2 集线器主驱动
ntoskrnl.exe Ring0 内核核心,Io/Ke/Mm/Ob 内核 API
hal.dll Ring0 硬件抽象层,中断底层封装
wdf01000.sys Ring0 KMDF 框架,usbhub 基于 KMDF 开发
usbport.sys Ring0 USB2 EHCI 总线抽象层(向下转发 URB)
usbehci.sys Ring0 EHCI 主机控制器硬件驱动(间接依赖,经由 usbport 隔离)
usbd.sys Ring0 USB 公共工具库,描述符解析、URB 构造辅助函数
usbccgp.sys Ring0 复合设备父驱动(多功能 USB 设备场景,可选)
usbstor.sys / hidusb.sys Ring0 上层 USB 类驱动
pci.sys Ring0 PCI 总线驱动,枚举 EHCI PCI 硬件
ci.dll Ring0 代码完整性,DSE 驱动签名校验
ntdll.dll Ring3 用户态系统调用入口

三、依赖关系

  1. usbhub.sys 强依赖 wdf01000.sys(KMDF),依靠 WDF 设备对象、IO 队列管理 IRP/URB。
  2. 向下强依赖 usbport.sys:usbhub 所有 URB 请求全部提交到 usbport,不直接调用 usbehci。
  3. 向上:PnP 管理器依赖 usbhub;usbhub 检测到端口设备后,创建设备 PDO 上报 PnP,PnP 加载对应类驱动。
  4. 基础依赖 ntoskrnl + hal.dll:IRP、内存分配、自旋锁、内核对象生命周期管理。
  5. 依赖 usbd.sys:解析 USB 设备 / 配置 / 接口描述符,组装 USB 标准控制请求 URB。

单向依赖链(USB2.0 EHCI): 设备类驱动(usbstor/hidusb) → usbccgp.sys(可选) → usbhub.sys → usbport.sys → usbehci.sys → pci.sys → EHCI硬件

四、配套链(USB2.0 EHCI 完整内核驱动栈)

【Ring3 用户态】应用程序
    ↓
【Ring0 设备类驱动】usbstor.sys / hidusb.sys / usbaudio.sys
    ↓
usbccgp.sys(复合USB设备,多接口拆分,可选)
    ↓
usbhub.sys(USB2集线器驱动:端口状态、设备枚举、HUB协议)
    ↓
usbport.sys(USB2总线抽象层、URB排队、电源/PnP管理)
    ↓
usbehci.sys(EHCI硬件驱动,TD传输描述符、硬件中断)
    ↓
pci.sys + hal.dll
    ↓
EHCI PCI硬件(南桥USB2控制器)

配套子系统:

  1. PnP 管理器:接收 usbhub 上报的 PDO,匹配硬件 ID,加载 USB 类驱动
  2. 电源管理器:usbhub 发起端口选择性挂起请求,经由 usbport 协调底层硬件 D 状态
  3. ETW:USB2 端口插拔、复位、枚举失败事件跟踪
  4. WMI:集线器、端口状态在设备管理器展示
  5. SRM 安全子系统:USB 设备对象 SD,复用 ntoskrnl SRM 四层权限校验

五、逻辑链路(2 条核心链路:USB2 设备枚举、业务数据传输)

链路 1:USB2 U 盘设备枚举

U盘插入 → EHCI硬件端口状态变更,触发硬件中断
    ↓
usbehci ISR/DPC捕获事件,上报 usbport.sys
    ↓
usbport转发端口事件给 usbhub.sys
    ↓
usbhub执行端口上电、USB复位;调用usbd构造GET_DESCRIPTOR的URB
    ↓
读取设备描述符、分配USB地址、读取配置描述符
    ↓
usbhub创建设备PDO上报PnP管理器,PnP加载 usbstor.sys
    ↓
usbstor创建SCSI LUN PDO,disk.sys识别分区、分配盘符

链路 2:USB2 U 盘写入 IO 传输

Ring3应用 NtWriteFile → ntfs.sys → disk.sys
    ↓
usbstor.sys将SCSI命令封装为BOT协议,生成Bulk URB
    ↓
usbccgp.sys(复合设备场景可选)转发 → usbhub.sys接收URB
    ↓
usbhub提交URB到usbport.sys,usbport排队调度
    ↓
usbport调用usbehci回调,构造TD传输描述符,硬件DMA传输
    ↓
传输完成,EHCI硬件中断,逐层向上完成URB、IRP
    ↓
通知用户态写入完成

六、边界

1. 职责边界

✅ usbhub.sys 负责:

  • USB2 集线器规范实现,端口状态机、端口上电 / 复位、过流检测
  • 设备枚举,读取 USB 描述符,创建设备 PDO 上报 PnP
  • URB 转发,HUB 类标准 USB 控制请求处理
  • 端口电源管理、选择性挂起、远程唤醒配置

❌ usbhub.sys不负责:

  • 不直接操作 EHCI 硬件寄存器、不管理 TD 传输描述符(usbehci 负责)
  • 不实现设备类协议(存储、HID 交给 usbstor/hidusb)
  • 不用于 USB3 xHCI 架构,USB3 使用 usbhub3.sys

2. 架构边界

  • usbhub 支持两类 HUB:主板根 HUB(EHCI 内置)、外接独立 USB2 扩展 HUB。
  • 仅 EHCI USB2 栈加载 usbhub;xHCI USB3 栈完全不加载 usbhub。
  • 一个 HUB 设备实例对应一个 usbhub 驱动实例;多个端口共享同一个驱动实例。

3. 故障边界

  • 端口枚举超时、描述符读取失败:usbhub 标记端口异常,PnP 报黄色感叹号;单个端口故障不影响其他端口。
  • URB 队列卡死、KMDF 对象泄漏:USB2 集线器下全部设备无响应;USB3 端口不受影响。
  • 内核池损坏会触发蓝屏;故障范围局限在 EHCI/USB2 子系统。

4. 电源边界

  • usbhub 跟踪端口 IO 引用计数,存在活跃 IO 时阻止端口进入 D3 选择性挂起。
  • 远程唤醒信号:底层 EHCI → usbport → usbhub,由 usbhub 唤醒端口设备。

5. 安全边界

  • usbhub 内核驱动,加载前经过 CI/DSE 驱动签名校验。
  • usbhub 本身不做访问权限判定;USB 设备对象 ACL、SID+Token 四层校验,全部由 ntoskrnl SRM 完成。

hidusb.sys 拆解 解构

hidusb.sys:USB HID 类内核驱动(Human Interface Device),Ring0 KMDF 驱动。

定位:USB 总线下 HID 设备的类驱动,实现 HID 协议与 USB 传输之间的转换;向上对接 hidclass.sys(HID 类抽象层),向下对接 USB 驱动栈(usbhub3.sys/usbhub.sys)。

典型设备:USB 键盘、鼠标、触摸板、游戏手柄、USB 指纹识别、USB 自定义 HID 传感器设备。

一、底层原理

  1. HID 报告管道绑定 设备枚举阶段读取 HID 描述符、报告描述符,识别 IN 中断端点、OUT 中断端点,建立 HID 报告与 USB 中断 URB 的映射。HID 设备依靠中断传输上报事件(按键、鼠标位移),区别于 U 盘 Bulk 批量传输。
  2. URB 中断轮询(IN 中断 URB) hidusb 持续提交 IN 中断 URB,等待设备主动上报 HID 输入报告;按键按下 / 鼠标移动时,设备通过中断端点返回 HID 报告,hidusb 捕获数据,上交 hidclass。
  3. HID 控制请求封装 通过 USB 控制通道下发 HID 类请求:Get_Report、Set_Report、Get_Descriptor,读取 / 写入 HID 报告。
  4. HID 设备 PnP 管理 解析 HID 报告描述符,生成 HID 设备 PDO,上报 PnP 管理器;支持多 HID 子集合(复合 HID 设备,例如带多媒体按键的键盘)。
  5. 错误恢复 中断 URB 超时、端点错误时,执行端点复位、设备复位,重建中断 URB。

核心思想: hidusb.sys = HID 协议 ↔ USB 中断传输的协议转换层。向上屏蔽 USB 底层,给 hidclass 提供标准 HID 报告;向下将 HID 读写请求封装成 USB 中断 URB 下发 USB 栈。

二、依赖文件

文件 层级 角色说明
hidusb.sys Ring0 USB HID 类主驱动
ntoskrnl.exe Ring0 内核核心,Io/Ke/Mm/Ob 内核 API
hal.dll Ring0 硬件抽象层
wdf01000.sys Ring0 KMDF 框架,hidusb 基于 KMDF 开发
hidclass.sys Ring0 HID 类上层抽象驱动,hidusb 向上对接
usbccgp.sys Ring0 复合设备父驱动(多功能复合 USB 设备场景,可选)
usbhub3.sys / usbhub.sys Ring0 USB 集线器驱动(USB3 / USB2 两套栈)
ucx01000.sys / usbport.sys Ring0 USB 总线抽象层,对应 USB3/USB2
usbxhci.sys / usbehci.sys Ring0 xHCI/EHCI 硬件控制器驱动
usbd.sys Ring0 USB 通用库,解析 USB 描述符、构造 URB
ci.dll Ring0 代码完整性,DSE 驱动签名校验
ntdll.dll Ring3 用户态系统调用入口

三、依赖关系

  1. hidusb.sys 强依赖 wdf01000.sys(KMDF),WDF 设备对象、IO 队列管理 URB/IRP。
  2. 向上依赖 hidclass.sys:hidusb 创建 HID PDO,注册到 hidclass;hidclass 接收 HID 报告,向上提供 HID 接口。
  3. 向下依赖 USB 驱动栈:复合设备经过 usbccgp;普通 HID 设备直接下发给 usbhub3 /usbhub。hidusb 不直接调用 UCX/usbxhci。
  4. 基础依赖 ntoskrnl + hal.dll:内存、IRP、自旋锁、内核对象生命周期。
  5. 依赖 usbd.sys:解析 USB/HID 描述符,构造控制传输 URB。

单向依赖链(USB3 HID 键盘): hidclass.sys → hidusb.sys → usbccgp.sys(可选) → usbhub3.sys → ucx01000.sys → usbxhci.sys → pci.sys → xHCI硬件

四、配套链(USB3 HID 设备完整内核驱动栈)

【Ring3 用户态】应用程序 / 输入子系统 → hid.dll
    ↓
hidclass.sys(HID通用抽象层,HID报告管理)
    ↓
hidusb.sys(USB HID类驱动:HID ↔ USB中断URB转换)
    ↓
usbccgp.sys(复合USB设备,例如键盘带读卡器,可选)
    ↓
usbhub3.sys(根集线器、端口管理)
    ↓
ucx01000.sys(UCX抽象层,URB排队、PnP/电源)
    ↓
usbxhci.sys(xHCI硬件驱动,TRB、DMA传输)
    ↓
pci.sys + hal.dll
    ↓
xHCI PCIe硬件 + USB HID硬件(USB键盘/鼠标)

配套子系统:

  1. PnP 管理器:hidusb 上报 HID 子 PDO,加载 hidclass,生成 HID 设备节点
  2. 输入子系统(kbdclass/mouclass):hidclass 解析 HID 报告,转换为键盘 / 鼠标输入事件
  3. ETW:HID 报告、URB 错误、设备复位事件跟踪
  4. WMI:HID 设备信息上报设备管理器
  5. SRM 安全子系统:HID 设备对象拥有独立 SD,复用 ntoskrnl SRM 四层权限校验

五、逻辑链路(2 条核心链路:HID 设备枚举、按键上报)

链路 1:USB HID 键盘设备枚举

USB键盘插入 → xHCI硬件端口中断
    ↓
usbxhci → ucx01000 → usbhub3,端口复位,读取USB描述符
    ↓
PnP匹配硬件ID,加载 hidusb.sys
    ↓
hidusb调用usbd读取HID描述符、HID报告描述符,解析按键映射
    ↓
hidusb创建HID PDO,注册到 hidclass.sys
    ↓
hidclass加载kbdclass键盘类驱动,接入系统输入栈
    ↓
设备管理器出现键盘设备,系统可接收按键

链路 2:按键按下,HID 输入上报链路

物理按键按下 → USB键盘硬件生成HID输入报告
    ↓
设备通过USB中断IN端点,触发中断传输
    ↓
底层xHCI硬件DMA完成传输,硬件中断触发
    ↓
usbxhci → ucx01000 → usbhub3 → usbccgp(可选),将中断URB返回hidusb
    ↓
hidusb读取HID报告,上交hidclass.sys
    ↓
hidclass解析HID报告,转发给kbdclass,生成键盘输入事件
    ↓
输入事件传递到用户态应用程序(记事本接收按键)
    ↓
hidusb再次提交新的IN中断URB,等待下一次按键事件

六、边界

1. 职责边界

✅ hidusb.sys 负责:

  • 读取 HID 描述符、报告描述符,建立中断端点 URB
  • 管理 HID 中断 IN/OUT 传输,捕获输入报告,下发输出报告
  • HID 类 USB 标准请求 (Get/Set Report) 封装、端点复位错误恢复
  • 创建 HID PDO,对接 hidclass

❌ hidusb.sys不负责:

  • 不操作 xHCI 硬件寄存器,不管理 TRB(交给下层 USB 栈)
  • 不解析按键 / 鼠标业务逻辑,报告解析交给 hidclass;kbdclass/mouclass 负责输入事件转换
  • 不实现 USB 集线器协议(usbhub3 负责端口复位)

2. 架构边界

  • hidusb 同时兼容 USB2 (usbhub.sys) 与 USB3 (usbhub3.sys) 两套 USB 驱动栈。
  • 仅 USB 接口 HID 设备使用 hidusb;I2C/SPI HID 设备使用i2chid.sys,不走 hidusb。
  • 复合 USB 设备中的 HID 子接口,由 usbccgp 拆分后,每个 HID 子接口单独加载 hidusb。

3. 故障边界

  • 中断 URB 超时、端点异常:hidusb 尝试复位 USB 端点;多次失败设备断开,设备管理器报黄色感叹号。
  • 单个 HID 设备故障,不影响同 USB 端口上其他独立设备;复合设备仅影响当前 HID 子接口。
  • URB 队列卡死、KMDF 内存泄漏:键盘 / 鼠标无响应;极端内核池损坏触发蓝屏。

4. 电源边界

  • hidusb 维护中断 URB 引用计数;IO 活跃时阻止 USB 端口进入 D3 选择性挂起。
  • 设备进入挂起后,IN 中断 URB 会暂停;远程唤醒触发后 hidusb 重新提交中断 URB。

5. 安全边界

  • hidusb 内核驱动,加载前经过 CI/DSE 驱动签名校验。
  • hidusb 不实现访问控制;HID 设备对象 ACL、SID+Token 四层权限校验,全部由 ntoskrnl SRM 完成。

usbport.sys 拆解 解构

usbport.sys:USB Port Driver,USB 2.0 (EHCI) 架构下的USB 总线父驱动,Ring0 KMDF 内核驱动。

定位:仅用于老式 EHCI USB2.0 驱动栈;UCX/xHCI(USB3.x)驱动栈不再使用 usbport.sys,USB3 栈替换为 ucx01000.sys。

历史背景:WinXP~Win10 早期 USB2 架构核心总线抽象层,向上对接 usbhub.sys,向下对接 usbehci.sys (EHCI 主机控制器驱动)。

一、底层原理

  1. EHCI 总线抽象封装 对 EHCI 主机控制器做统一抽象,隔离上层 hub 驱动与底层 EHCI 硬件驱动;向上提供一套标准化 USB 接口、URB 请求模型。
  2. URB 请求排队、路由、状态跟踪 接收上层 usbhub.sys 下发 URB,校验请求合法性,维护传输队列,下发到底层 usbehci;传输完成后回调上层驱动。
  3. PnP 与电源统一管理 管理 EHCI 控制器、根 HUB 的 PnP 枚举、设备启停;统一管理 USB 选择性挂起、D 状态电源管理、远程唤醒策略。
  4. 端口事件转发 接收底层 EHCI 上报的端口插拔、过流、复位事件,向上转发给 usbhub.sys。
  5. 公共 USB 资源管理 管理控制器带宽分配(USB2.0 带宽调度,同步传输音频 / 视频)、全局 USB 事件 ETW 跟踪。

核心思想: usbport.sys 是USB2 EHCI 栈的中间抽象层,作用等价于 USB3 栈的 ucx01000.sys;新旧两代 USB 架构,抽象层名称完全不同,不能混用。

二、依赖文件

文件 层级 角色说明
usbport.sys Ring0 USB2 EHCI 总线父驱动
ntoskrnl.exe Ring0 内核核心,Io/Ke/Mm/Ob 内核 API
hal.dll Ring0 硬件抽象层,中断、寄存器底层封装
wdf01000.sys Ring0 KMDF 框架,usbport 基于 KMDF 开发
usbehci.sys Ring0 EHCI 主机控制器硬件驱动(USB2.0)
usbhub.sys Ring0 USB2 根集线器驱动(对应 USB3 的 usbhub3.sys)
usbd.sys Ring0 USB 通用工具库,描述符、URB 辅助函数
pci.sys Ring0 PCI 总线驱动,枚举 EHCI PCI 硬件
ci.dll Ring0 代码完整性,DSE 驱动签名校验
usbccgp.sys / usbstor.sys / hidusb.sys Ring0 上层设备类驱动,复合设备 / 存储 / HID
ntdll.dll Ring3 用户态系统调用入口

三、依赖关系

  1. usbport.sys 强依赖 wdf01000.sys(KMDF),基于 WDF 设备对象、IO 队列管理 IRP/URB。
  2. 向上:usbhub.sys(USB2 hub)依赖 usbport.sys,所有 URB、PnP、电源请求提交给 usbport。
  3. 向下强依赖 usbehci.sys:usbehci 作为 EHCI 客户端驱动,注册回调给 usbport,由 usbport 调度;usbport 不直接操作硬件寄存器。
  4. 基础依赖 ntoskrnl + hal.dll:IRP、内存分配、自旋锁、内核对象生命周期管理。
  5. 依赖 usbd.sys:辅助 URB 构建、USB 描述符解析。

单向依赖链(USB2 EHCI 栈): 设备类驱动(usbstor/hidusb) → usbccgp.sys(可选) → usbhub.sys → usbport.sys → usbehci.sys → pci.sys → EHCI硬件

⚠️ 重要区分:USB3 xHCI 栈没有 usbport.sys,替换为 ucx01000.sys。

四、配套链(USB2.0 EHCI 完整内核驱动栈)

【Ring3 用户态】应用程序 → winusb.dll / hid.dll
    ↓
【Ring0 设备类驱动】usbstor.sys / hidusb.sys / usbaudio.sys
    ↓
usbccgp.sys(复合USB设备,可选)
    ↓
usbhub.sys(USB2根集线器驱动,端口枚举)
    ↓
usbport.sys(USB2总线抽象层,URB排队、电源/PnP管理)
    ↓
usbehci.sys(EHCI主机控制器硬件驱动,处理TD、中断)
    ↓
pci.sys + hal.dll
    ↓
EHCI PCI硬件(南桥USB2控制器)

配套子系统:

  1. PnP 管理器:接收 usbhub.sys 上报 PDO,加载 USB 设备类驱动
  2. 电源管理器:usbport 统一协调 USB2 选择性挂起、D 状态、远程唤醒
  3. ETW:USB2 传输、端口事件跟踪
  4. WMI:USB 控制器、端口状态上报设备管理器
  5. SRM 安全子系统:USB 设备对象 SD,复用 ntoskrnl SRM 四层权限校验

五、逻辑链路(2 条核心链路:USB2 设备枚举、数据传输)

链路 1:USB2 设备热插拔枚举(USB2 U 盘插入)

USB2设备插入 → EHCI硬件端口变更中断
    ↓
usbehci ISR/DPC捕获事件,上报给 usbport.sys
    ↓
usbport更新端口状态,通知上层 usbhub.sys
    ↓
usbhub.sys端口复位,调用usbd读取设备描述符、分配USB地址
    ↓
PnP管理器加载usbstor.sys
    ↓
usbstor创建SCSI LUN PDO,disk.sys挂载磁盘、分配盘符

链路 2:USB2 U 盘写入 IO 传输

Ring3应用 NtWriteFile → ntfs.sys → disk.sys
    ↓
usbstor.sys封装SCSI命令为BOT协议,生成URB
    ↓
usbccgp.sys(复合设备可选)转发 → usbhub.sys
    ↓
usbport.sys接收URB,放入传输队列,调用usbehci回调
    ↓
usbehci构建TD(传输描述符),硬件执行DMA传输
    ↓
传输完成触发中断,逐层向上完成URB、IRP
    ↓
通知用户态写入完成

六、边界

1. 职责边界

✅ usbport.sys 负责:

  • EHCI 架构下 URB 校验、排队、路由;控制器带宽分配
  • USB2 主机控制器 PnP、全局电源策略、选择性挂起管理
  • 端口事件转发,hub 与 EHCI 硬件驱动之间的中间抽象层

❌ usbport.sys不负责:

  • 不操作 EHCI 硬件寄存器、不处理 TD 传输描述符(交给 usbehci.sys)
  • 不实现 USB 设备类协议(存储 / HID 交给 usbstor/hidusb)
  • 不能用于 USB3 xHCI 栈,USB3 使用 ucx01000

2. 架构边界

  • 存在于 WinXP ~ Win10;Win11 新平台默认仅 xHCI,不再加载 usbport.sys。
  • 硬件 BIOS 如果设置为 “兼容模式(EHCI)”,系统才会加载整套 EHCI+usbport 驱动栈。
  • 一个 EHCI 控制器实例对应一个 usbport 实例;多控制器各自独立。

3. 故障边界

  • URB 队列死锁、对象泄漏:USB2 端口全部失效,设备管理器 USB2 控制器报错;USB3 端口不受影响。
  • 带宽分配失败:USB2 高速同步设备(USB 摄像头、USB 声卡)无法正常工作。
  • 池损坏会触发蓝屏;故障范围仅局限在EHCI/USB2 总线,不影响 xHCI USB3、磁盘、网络等其他子系统。

4. 电源边界

  • usbport 统一管控 USB2 全局选择性挂起策略,下发电源请求到 usbehci 执行硬件 D 状态切换。
  • 远程唤醒事件:底层 EHCI 上报给 usbport,再向上传递到 usbhub.sys 唤醒设备。

5. 安全边界

  • usbport 内核驱动,加载前经过 CI/DSE 驱动签名校验。
  • usbport 不做访问控制;USB 设备对象 ACL、SID+Token 四层校验,全部由 ntoskrnl SRM 完成。

USB xHCI Compliant Host Controller驱动是指支持USB 3.0及以上标准的主机控制器驱动程序。这种驱动程序允许计算机系统与USB 3.0及更高版本的设备进行通信和数据传输。

具体来说:

  • xHCI(eXtensible Host Controller Interface)是一种USB控制器接口标准,用于管理USB 3.0及更高版本的设备。它取代了较早的USB 2.0控制器接口标准。

  • Compliant Host Controller表示符合xHCI标准的主机控制器。这种控制器可以与操作系统配合工作,并提供适当的驱动程序支持,以确保USB 3.0及更高版本设备在计算机上能够正常工作。

USB xHCI Compliant Host Controller驱动通常由操作系统提供,或者由硬件设备制造商提供的驱动程序包中包含。这些驱动程序负责处理与USB 3.0及更高版本设备的通信,确保高速数据传输、设备充电管理以及其他与USB 3.0标准相关的功能正常运行。


安装和未安装USB xHCI(eXtensible Host Controller Interface)Compliant Host Controller驱动会在计算机系统中造成显著的功能和性能差异。以下是安装和未安装驱动时的主要区别:

安装了USB xHCI驱动时:

  1. 支持USB 3.0及更高版本设备:

    • 安装了xHCI驱动后,系统可以正确识别和管理USB 3.0及更高版本的设备。这些设备包括具有高速数据传输需求的外部硬盘驱动器、摄像头、视频采集设备等。
  2. 稳定的数据传输和性能:

    • xHCI驱动确保数据在USB 3.0及更高版本的设备上稳定传输。它管理数据传输的流程和效率,以最大化使用USB 3.0提供的高带宽和低延迟特性。
  3. 电源管理和节能功能:

    • 安装了xHCI驱动后,系统可以有效地管理USB设备的电源状态。这包括设备的唤醒、进入和退出低功耗模式等功能,有助于减少能耗并延长设备寿命。
  4. 操作系统的兼容性和稳定性:

    • xHCI驱动提供了操作系统与USB控制器之间的标准接口,确保USB设备能够与操作系统兼容并稳定工作。这种兼容性使得设备的安装和使用更加简便和可靠。

未安装USB xHCI驱动时:

  1. 缺乏USB 3.0及更高版本设备支持:

    • 没有安装xHCI驱动的系统无法识别和管理USB 3.0及更高版本的设备。这些设备可能无法正常工作,或者只能以低速或者不稳定的方式进行数据传输。
  2. 限制数据传输速度和效率:

    • 缺少xHCI驱动可能导致USB设备在传输数据时速度较慢或者存在中断。这会影响到用户体验和设备的性能表现。
  3. 电源管理能力受限:

    • 没有xHCI驱动的系统可能无法有效管理USB设备的电源状态,导致设备难以实现低功耗模式或者唤醒操作,从而增加系统能耗和设备的耗电量。
  4. 兼容性和稳定性问题:

    • 缺少xHCI驱动可能会导致操作系统与USB控制器之间的兼容性问题,使得USB设备无法正常被检测、识别或者使用。这可能需要手动安装驱动程序或者更新系统以解决问题。

 安装USB xHCI Compliant Host Controller驱动对于确保系统能够充分利用USB 3.0及更高版本设备的性能和功能至关重要。


USB xHCI(eXtensible Host Controller Interface)Compliant Host Controller驱动的发展可以简要概括为以下几个阶段:

  1. USB 3.0标准的推出与xHCI标准的制定:

    • USB 3.0标准最早发布于2008年,引入了超速的数据传输速率和新的数据管理协议。
    • xHCI标准在此基础上制定,旨在支持USB 3.0及更高版本设备的控制器接口。
  2. 驱动开发与整合:

    • 随着USB 3.0技术的普及,操作系统厂商(如微软的Windows、苹果的macOS、Linux发行版等)开始整合支持xHCI的驱动程序。
    • 制造商也开始提供适用于支持xHCI的主板芯片组和其他硬件设备的驱动程序。
  3. 优化和兼容性提升:

    • 随着时间的推移,驱动程序经历了多次更新和优化,以提高对USB 3.0设备的兼容性、稳定性和性能。
    • 各操作系统发布的更新版本通常会包括针对xHCI的改进,以适应新硬件和改进用户体验。
  4. USB 3.1、USB 3.2和USB4的支持:

    • 随着USB 3.0标准的进一步演进,如USB 3.1、USB 3.2和USB4的推出,xHCI标准也在相应更新和扩展。
    • 驱动程序需要持续更新以支持新的USB版本和其提供的增强功能,如更快的数据传输速率和改进的功耗管理。
  5. 未来发展趋势:

    • 随着USB技术的不断发展,xHCI驱动的未来发展趋势可能包括更高的数据传输速率、更智能的功耗管理、更广泛的设备兼容性以及更强大的安全性措施。
    • 驱动开发将继续关注这些方面,以满足日益增长的USB设备和应用需求。

 USB xHCI Compliant Host Controller驱动经历了从基础标准制定到不断优化和适应新技术的发展过程,以支持现代计算机系统与高速USB设备之间的稳定通信和数据传输。


USB xHCI(eXtensible Host Controller Interface)Compliant Host Controller驱动的底层原理涉及到操作系统与USB控制器之间的交互、数据传输管理和设备控制。以下是其主要的底层原理:

  1. 架构与接口:

    • xHCI标准定义了一种新的USB控制器接口架构,用于管理USB 3.0及更高版本的设备。这些设备支持更快的数据传输速率和更复杂的数据管理功能。
    • xHCI控制器包括了多个功能模块,如命令处理器(Command Processor)、端点上下文管理器(Endpoint Context Manager)、数据管理器(Transfer Ring Manager)等,用于管理不同类型的USB数据传输和设备控制。
  2. 数据传输管理:

    • xHCI驱动程序负责管理传输环(Transfer Rings),这些环用于在主机和设备之间进行数据传输。每个传输环都有一个或多个传输上下文(Transfer Context),用于描述传输的参数和状态。
    • 数据传输可以是同步的或异步的,可以在不同的端点(Endpoints)之间进行,支持各种传输类型(Control、Bulk、Interrupt、Isochronous等),驱动程序需要确保按照USB协议的要求正确传输数据。
  3. 设备管理和配置:

    • xHCI驱动程序负责检测和管理连接到系统的USB设备。这包括设备的初始化、配置、重置、暂停和恢复等操作。
    • 驱动程序需要理解USB设备的描述符和功能,以便正确识别和与设备进行通信。
  4. 中断处理和事件管理:

    • xHCI控制器会生成各种中断和事件,例如数据传输完成、设备状态变更等。驱动程序需要有效地处理这些中断和事件,以便及时响应和维护系统稳定性。
  5. 电源管理:

    • xHCI标准包括了强大的电源管理功能,驱动程序需要支持对USB设备的适当电源管理,包括设备的唤醒、低功耗状态管理等。
  6. 安全性和稳定性:

    • 由于USB设备可以是多样化和动态变化的,xHCI驱动程序需要确保对各种情况(如设备故障、数据冲突、协议错误等)的稳健处理,以确保系统的安全性和稳定性。

 USB xHCI Compliant Host Controller驱动在底层实现了复杂的数据管理、设备控制和系统集成,以支持现代USB 3.0及更高版本设备的高效运行和稳定性。


USB xHCI(eXtensible Host Controller Interface)Compliant Host Controller驱动的架构涉及到多个关键组件,用于管理和控制USB 3.0及更高版本设备的数据传输和功能。以下是其主要架构组件:

  1. 命令处理器(Command Processor):

    • 命令处理器是xHCI驱动的核心组件之一,负责处理来自主机CPU的命令,并将它们发送给USB控制器。
    • 这些命令可以包括初始化控制器、配置端点、启动数据传输等操作。命令处理器确保命令的顺序和正确执行,以及对命令执行结果的处理和反馈给操作系统。
  2. 设备管理器(Device Management):

    • 设备管理器负责检测、识别和管理连接到主机的USB设备。
    • 它包括了设备初始化、配置、重置、暂停、恢复等功能,确保设备能够在主机系统上正确运行并与操作系统进行交互。
  3. 端点上下文管理器(Endpoint Context Manager):

    • 端点上下文管理器负责管理每个USB设备端点的状态和属性。
    • 每个端点都有其特定的传输要求和特征,端点上下文管理器确保正确配置和管理这些端点,以便在数据传输时保持正确的协议和性能。
  4. 传输环管理器(Transfer Ring Manager):

    • 传输环管理器负责管理传输环(Transfer Rings),这些环用于描述和管理数据传输的状态和流程。
    • 每个传输环与特定的端点和传输类型相关联,包括同步、异步传输和各种数据包的传输要求。
  5. 事件管理器(Event Manager):

    • 事件管理器处理来自xHCI控制器的各种中断和事件,例如数据传输完成、设备状态变更等。
    • 它确保驱动程序能够及时响应这些事件,并采取适当的措施来维护系统的稳定性和性能。
  6. 电源管理(Power Management):

    • USB xHCI驱动还包括了电源管理功能,用于管理USB设备的电源状态。
    • 这包括设备的唤醒、进入和退出低功耗状态等功能,以最大程度地减少系统能耗和延长设备寿命。
  7. 安全性和错误处理:

    • 驱动程序还需实现安全性和错误处理功能,以确保对USB设备的安全访问和操作。
    • 这包括检测和处理各种错误情况,如数据传输错误、设备故障、通信协议错误等,以防止对系统造成潜在的损害或安全风险。

 USB xHCI Compliant Host Controller驱动的架构是一个高度复杂且精密设计的系统,通过各个组件协同工作,实现对USB 3.0及更高版本设备的有效控制和管理。


USB xHCI(eXtensible Host Controller Interface)Compliant Host Controller驱动在现代计算机系统中具有广泛的应用场景,主要涵盖以下几个方面:

  1. USB 3.0及更高版本设备支持:

    • xHCI驱动是支持USB 3.0及其后续版本(如USB 3.1、USB 3.2)的关键组件。它能够有效地管理和控制这些高速USB设备的数据传输,确保设备在高速模式下的稳定性和性能。
  2. 操作系统的USB接口支持:

    • xHCI驱动提供了操作系统与主机控制器之间的标准接口。它允许操作系统通过统一的接口与连接的USB设备进行通信和数据交换,实现设备的即插即用特性。
  3. 电源管理和节能功能:

    • xHCI驱动支持USB设备的高效能管理,包括设备的唤醒、低功耗模式的管理等。这些功能有助于减少系统能耗,延长电池寿命,并在不需要时将设备置于低功耗状态以降低能源消耗。
  4. 数据传输的高效性和可靠性:

    • xHCI驱动通过管理传输环(Transfer Rings)、端点上下文和命令处理器等组件,确保USB数据传输的高效性和可靠性。它能够在高速传输中保持数据的完整性和正确性,同时最大限度地利用USB 3.0及更高版本的带宽。
  5. 多设备管理和协同工作:

    • 在多设备连接的环境中,xHCI驱动能够有效地管理多个USB设备的同时操作。它通过事件管理器和设备管理器处理设备状态变更、数据传输完成等事件,以确保系统能够及时响应和处理多个设备的操作需求。

 USB xHCI Compliant Host Controller驱动在现代计算机系统中是一个关键的软件组件,通过其高效的数据管理和控制能力,支持了USB 3.0及更高版本设备的广泛应用,包括外部存储设备、高速数据传输设备、外部显示器、摄像头等多种USB接口设备。


 

posted @ 2024-07-08 06:36  suv789  阅读(1800)  评论(0)    收藏  举报