Microsoft OS 描述符用于 USB 设备

Microsoft提供了一组专有设备类和 USB 描述符,这些描述符称为Microsoft OS 描述符(MOD)。

由于包含多个硬件功能的设备的迅速出现,许多制造商发现其设备不适合任何当前的通用串行总线(USB)设备类。 这剥夺了此类制造商 USB 技术最具吸引力的功能之一:驱动程序软件的标准化(根据设备的类)。 Windows 为属于标准 USB 设备类的大多数设备提供本机类驱动程序,这些驱动程序允许最终用户轻松将此类设备附加到计算机,而无需安装特殊软件。

为了适应设备不适合当前 USB 设备类集的制造商,Microsoft开发了一组专有设备类和 USB 描述符,这些描述符称为MICROSOFT OS 描述符(MOD)。 应用程序和系统软件都可以通过查询设备以确定它们是否支持 MOD,从而识别出属于微软定义设备类的设备。

Microsoft OS 描述符除了支持专有设备类之外,还具有重要的用途。 具体而言,它们提供一种机制,用于从设备固件派生最大优势。 借助Microsoft OS 描述符,可以使用固件提供帮助文件、特殊图标、统一资源定位符(URL)、注册表设置和其他数据,以简化安装和增强客户满意度。 在某些情况下,可以放弃存储媒体(如软盘和 CD),从而简化升级的交付和支持。

操作系统支持

支持以下Microsoft OS 1.0 描述符:

  • Windows 11
  • Windows 10操作系统
  • 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 11
  • Windows 10操作系统
  • Windows 8.1

为什么 Windows 发出字符串描述符请求来索引0xEE?

支持 Microsoft OS 描述符的设备必须在固件中通过固定的字符串索引 0xEE 存储一个特殊的 USB 字符串描述符。 此字符串描述符称为Microsoft 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 1.0 描述符规范

Windows 支持哪些类型的 OS 功能描述符?

要存储为特征描述符的任何信息都必须符合Microsoft定义的标准格式之一。 在没有Microsoft同意的情况下,无法定义或实现其他功能描述符。 Microsoft定义了以下功能描述符:

  • 扩展的 Compat ID。 Windows 使用类和子类代码来帮助查找 USB 设备的相应默认驱动程序。 但是,USB 设备工作组必须分配这些代码。 这意味着实现新类型的功能的设备通常还没有适当的类和子类代码,因此 Windows 无法使用代码选择默认驱动程序。 IHV 可以通过将信息作为扩展兼容的 ID OS 功能描述符存储在固件中来规避此问题。 然后,当设备插入并使用它来帮助确定要加载的默认驱动程序时,Windows 可以检索此信息。
  • 扩展属性。 目前,可以在两个级别上为 USB 设备声明属性:类级别或设备节点级别。 扩展属性 OS 功能描述符允许供应商在设备固件中存储更多属性,例如帮助页、URL 和图标。