Windows XP下usbport
+ -

Win2000通用USB主机控制器库usbd.sys

2026-05-06 本文链接为:http://www.usbzh.com/article/detail-1645.html ,欢迎转载,转载请附上本文链接。

usbd简介

Win2000支持的主uhci和ohci,两都都支持usb1.1,只是实现方式不同而已。但是对于不同的主机控制器实现方式,肯定会有很多通用的代码,微软将其其静态库的方式存入内核,这样无论是开发uhci还是ohci主机USB控制器程序,只需要链接usbd通用代码即可。

  • 对于uhci,其完整的主机控制驱动程序为uhci mini小端口驱动和usbd.sys
  • 对于ohci,其完整的主机控制驱动程序为ohci mini小端口驱动和usbd.sys

    所以usbd.sys类似disk.sys,是类驱动程序

usb导出库

由于usbd是类驱动程序,所以其就和应用层的dll一样,负责导出通用库函数。

LIBRARY     USBD.SYS

EXPORTS
    USBD_AllocateDeviceName
    USBD_CalculateUsbBandwidth
    USBD_CompleteRequest
    USBD_CreateConfigurationRequest
    USBD_CreateDevice
    USBD_Debug_GetHeap
    USBD_Debug_LogEntry
    USBD_Debug_RetHeap
    USBD_Dispatch
    USBD_FreeDeviceMutex
    USBD_FreeDeviceName
    USBD_GetDeviceInformation
    USBD_GetInterfaceLength
    USBD_GetPdoRegistryParameter
    USBD_GetSuspendPowerState
    USBD_GetUSBDIVersion
    USBD_InitializeDevice
    USBD_MakePdoName
    USBD_ParseConfigurationDescriptor
    USBD_QueryBusTime
    USBD_RegisterHcDeviceCapabilities
    USBD_RegisterHcFilter
    USBD_RegisterHostController
    USBD_RemoveDevice
    USBD_RestoreDevice
    USBD_SetSuspendPowerState
    USBD_WaitDeviceMutex
#if defined(_X86_) && !defined(NO_DEF_ALIAS)
    _USBD_CreateConfigurationRequestEx@8 //导出原始 stdcall 符号
    _USBD_ParseConfigurationDescriptorEx@28
    _USBD_ParseDescriptors@16
    USBD_CreateConfigurationRequestEx=_USBD_CreateConfigurationRequestEx@8 //创建别名映射
    USBD_ParseConfigurationDescriptorEx=_USBD_ParseConfigurationDescriptorEx@28
    USBD_ParseDescriptors=_USBD_ParseDescriptors@16
#else
    USBD_CreateConfigurationRequestEx
    USBD_ParseConfigurationDescriptorEx
    USBD_ParseDescriptors
#endif
    DllInitialize   PRIVATE
    DllUnload       PRIVATE

可以看到,有三个函数会根据宏的不同,导出的名字不一样,带stdcall的别名或者和其它函数一样,不带别名。
这三个函数之所以有所不同,完全是因为调用者身份不同而因起的。
在 x86 的 stdcall 调用约定中:编译器自动添加 _FunctionName@N 后缀,N 为参数字节数

  • 当仅为该模块内部使用时,不需要stdcall的别名
  • 当被其它模块如驱动链接进入时,需要stdcall别名。这里其实使用了Ex扩展别名映射,
部分 功能 说明
_USBD_CreateConfigurationRequestEx@8 导出原始 stdcall 符号 @8 表示参数占 8 字节(2 个指针)
USBD_CreateConfigurationRequestEx=... 创建别名映射 将简洁名称指向带后缀的实际符号
别名名称 实际指向 作用
USBD_CreateConfigurationRequestEx _USBD_CreateConfigurationRequestEx@8 提供简洁的调用接口

调用者视角

// 用户代码可以使用简洁的函数名
PURB urb = USBD_CreateConfigurationRequestEx(configDesc, ifaceList);

链接器视角

USBD_CreateConfigurationRequestEx → _USBD_CreateConfigurationRequestEx@8

这些导出的函数功能如下:

序号 函数名 功能分类 说明
1 USBD_AllocateDeviceName 设备管理 分配设备名称
2 USBD_CalculateUsbBandwidth 带宽管理 计算 USB 带宽
3 USBD_CompleteRequest 请求处理 完成请求
4 USBD_CreateConfigurationRequest 配置管理 创建配置请求
5 USBD_CreateDevice 设备管理 创建设备
6 USBD_Debug_GetHeap 调试支持 获取调试堆
7 USBD_Debug_LogEntry 调试支持 调试日志记录
8 USBD_Debug_RetHeap 调试支持 返回调试堆
9 USBD_Dispatch 请求分发 分发 IRP 请求
10 USBD_FreeDeviceMutex 同步管理 释放设备互斥锁
11 USBD_FreeDeviceName 设备管理 释放设备名称
12 USBD_GetDeviceInformation 信息查询 获取设备信息
13 USBD_GetInterfaceLength 接口管理 获取接口长度
14 USBD_GetPdoRegistryParameter 注册表 获取 PDO 注册表参数
15 USBD_GetSuspendPowerState 电源管理 获取挂起电源状态
16 USBD_GetUSBDIVersion 版本查询 获取 USBDI 版本
17 USBD_InitializeDevice 设备管理 初始化设备
18 USBD_MakePdoName 设备管理 生成 PDO 名称
19 USBD_ParseConfigurationDescriptor 配置解析 解析配置描述符
20 USBD_QueryBusTime 时间查询 查询总线时间
21 USBD_RegisterHcDeviceCapabilities HC 注册 注册主机控制器设备能力
22 USBD_RegisterHcFilter HC 注册 注册主机控制器过滤器
23 USBD_RegisterHostController HC 注册 注册主机控制器
24 USBD_RemoveDevice 设备管理 移除设备
25 USBD_RestoreDevice 设备管理 恢复设备
26 USBD_SetSuspendPowerState 电源管理 设置挂起电源状态
27 USBD_WaitDeviceMutex 同步管理 等待设备互斥锁
28 USBD_CreateConfigurationRequestEx 配置管理 创建配置请求(扩展)
29 USBD_ParseConfigurationDescriptorEx 配置解析 解析配置描述符(扩展)
30 USBD_ParseDescriptors 描述符解析 解析描述符
31 DllInitialize 内部 DLL 初始化(私有)
32 DllUnload 内部 DLL 卸载(私有)

函数分类统计

分类 函数数量
设备管理 6
配置管理 3
HC 注册 3
调试支持 3
电源管理 2
同步管理 2
描述符解析 3
其他 5
内部函数 2
本文链接为:http://www.usbzh.com/article/detail-1645.html ,欢迎转载,转载请附上本文链接。

0 篇笔记 写笔记

Windows下USB音视频类驱动程序堆栈架构
一个USB接口的UVC摄像头接入Windows系统后,Windows会使用系统自带的驱动进行硬件设备驱动,从而实现“免驱”的效果。所以看着很简单的一件事,其实并不简单。这种表现的简单是由于Windows给我们做了大量的工作,从而使一个复杂的USB视频类设备在应用层实现方便的应用。Windows视频......
Windowst系统USB主机控制器简介
通过前文可知,在WinXP下,USBC主机端控制器驱动程序相对于WIN2000是不一样的。至少表现为驱动的名称是不一样的。WinXP下使用USBPort.sys作为USB端口驱动,其下可适配三种MINI小端口驱动程序,分别为usbehci.sys,usbuhci.sys和usbohci.sys。在......
USB主机控制器分配设备地址SetAddress
我们都知道USB总线负责对USB设备的管理,这里包括分配地址。但这个地址的分配其实是由USB主机控制器来实现的。这里我们以WINXP的usbehci.sys驱动为例进行分析。一条USB总线线上最多包括127个设备(包括该USB控制器下的USB根集线器),所以在USB主机控制器的其通过一个数据大小为......
Win2000通用USB主机控制器usbd.sys
usbd简介Win2000支持的主uhci和ohci,两都都支持usb1.1,只是实现方式不同而已。但是对于不同的主机控制器实现方式,肯定会有很多通用的代码,微软将其其静态库的方式存入内核,这样无论是开发uhci还是ohci主机USB控制器程序,只需要链接usbd通用代码即可。对于uhci,其完......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • CDC
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • USB资源
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

    打开支付宝扫一扫,即可进行扫码打赏哦

    您的支持,是我们前进的动力!