针对 USB 设备的 Microsoft OS 描述符
摘要
Microsoft 提供一组专有设备类和 USB 描述符,称为 Microsoft OS 描述符 (MOD) 。
由于包含多个硬件功能的设备迅速出现,许多制造商发现,他们的设备无法舒适地适应任何当前的通用串行总线 (USB) 设备类。 这剥夺了此类制造商最有吸引力的 USB 技术功能之一:根据设备) 的类别 (驱动程序软件的标准化。 Microsoft Windows 为属于标准 USB 设备类的大多数设备提供本机类驱动程序,这些驱动程序允许最终用户轻松地将此类设备连接到计算机,而无需安装特殊软件。
为适应其设备不适合当前 USB 设备类集的制造商,Microsoft Corporation 开发了一组专有设备类和 USB 描述符,称为 Microsoft OS 描述符 (MOD) 。 应用程序和系统软件都可以通过查询设备来确定它们是否支持 MOD 来标识属于 Microsoft 定义的设备类的设备。
Microsoft OS 描述符除了支持专有设备类之外,还有其他重要用途。 具体而言,它们提供一种机制,用于从设备固件中获得最大收益。 借助 Microsoft OS 描述符,你可以使用固件来提供帮助文件、特殊图标、统一资源定位符 (URL) 、注册表设置以及简化安装并提高客户满意度所需的其他数据。 在某些情况下,可以放弃软盘和光盘等存储介质,这简化了升级的交付和支持。
Operating-System支持
Microsoft OS 1.0 描述符受以下支持:
- Windows 8.1
- Windows 8
- Windows 7
- Windows Vista 和 Windows Server 2008
- Windows Xp with Service Pack 1 (SP1) ,Windows Server 2003
Microsoft OS 2.0 描述符受以下支持:
- Windows 8.1
为什么 Windows 发出字符串描述符请求以索引0xEE?
支持 Microsoft OS 描述符的设备必须将特殊的 USB 字符串描述符存储在固件中的固定字符串索引0xEE。 此字符串描述符称为 Microsoft OS 字符串描述符。
- 它的存在指示设备包含一个或多个 OS 功能描述符。
- 它包含检索关联的 OS 功能描述符所需的数据。
- 它包含一个签名字段,该字段将 OS 字符串描述符与 IHV 可能选择存储在0xEE的其他字符串区分开来。
- 它包含允许将来修订 Microsoft OS 描述符的版本号。
如果0xEE处没有字符串描述符,或者该索引处的字符串描述符不是有效的 OS 字符串描述符,则 Windows 假定设备不包含任何 OS 功能描述符。
首次将新设备附加到计算机时,支持 Microsoft OS 描述符的操作系统将请求索引0xEE处的字符串描述符。 Microsoft OS 字符串描述符包含一个嵌入的签名字段,操作系统使用该字段将其与可能位于索引0xEE的其他字符串区分开来。 如果存在包含索引0xEE正确签名字段的字符串描述符,则向操作系统指示设备支持 Microsoft OS 描述符。 Microsoft OS 字符串描述符还为操作系统提供版本信息。
操作系统在设备枚举期间(在加载设备的驱动程序之前)在索引0xEE查询字符串描述符,这可能会导致某些设备出现故障。 支持 Microsoft OS 描述符的 Windows 操作系统版本不支持此类设备。
如果设备在索引0xEE不包含有效的字符串描述符,则它必须使用停止数据包 (响应,换言之,即包含 STALL) 类型的数据包标识符的数据包,如通用串行总线规范的“请求错误”部分所述。 如果设备没有响应停止数据包,系统将向设备发出单端零重置数据包,以帮助其从停止状态恢复, (Windows XP 仅) 。
操作系统从设备请求 Microsoft OS 字符串描述符后,会创建以下注册表项:
HLKM\SYSTEM\CurrentControlSet\Control\UsbFlags\vvvvpppprrrrr
操作系统在此注册表项下创建名为 osvc 的注册表项,用于指示设备是否支持 Microsoft OS 描述符。 如果设备在操作系统首次查询 Microsoft OS 字符串描述符时未提供有效的响应,则操作系统不会对该描述符发出进一步的请求。
有关该键下的注册表项,请参阅 USB 设备注册表项。
有关详细信息,请参阅 Microsoft OS 描述符。
Windows 支持哪些类型的 OS 功能描述符?
要存储为功能描述符的任何信息都必须符合 Microsoft 定义的标准格式之一。 未经 Microsoft 同意,无法定义或实现其他功能描述符。 Microsoft 定义了以下功能描述符:
- 扩展的兼容性 ID。 Windows 使用类和子类代码来帮助查找 USB 设备的相应默认驱动程序。 但是,USB 设备工作组必须分配这些代码。 这意味着实现新类型功能的设备通常还没有适当的类和子类代码,因此 Windows 无法使用这些代码来选择默认驱动程序。 IHV 可以通过将信息作为扩展的兼容性 ID OS 功能描述符存储在固件中来避免此问题。 然后,Windows 可以在设备接通电源时检索此信息,并使用它来帮助确定要加载的默认驱动程序。
- 扩展属性。 目前,有两个级别可为 USB 设备声明属性:类级别或开发节点级别。 扩展属性 OS 功能描述符允许供应商存储其他属性,例如帮助页、URL 和图标设备固件。
相关主题
Microsoft OS 1.0 描述符规范
Microsoft OS 2.0 描述符规范
为 Windows 构建 USB 设备
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈