MICROSOFT USB 设备的 OS 描述符
Microsoft提供了一组专有设备类和 USB 描述符,这些描述符称为Microsoft OS 描述符(MOD)。
由于包含多个硬件功能的设备的迅速出现,许多制造商发现其设备不适合任何当前的通用串行总线(USB)设备类。 这剥夺了此类制造商 USB 技术最具吸引力的功能之一:驱动程序软件的标准化(根据设备的类)。 Windows 为属于标准 USB 设备类的大多数设备提供本机类驱动程序,这些驱动程序允许最终用户轻松将此类设备附加到计算机,而无需安装特殊软件。
为了适应设备不适合当前 USB 设备类集的制造商,Microsoft开发了一组专有设备类和 USB 描述符,这些描述符称为MICROSOFT OS 描述符(MOD)。 应用程序和系统软件都可以通过查询设备来确定它们是否支持 MOD 来确定属于Microsoft定义的设备类的设备。
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 功能描述符所需的数据。
- 它包含一个签名字段,用于区分 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 和图标传入设备固件。