针对 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 设备