MB 接口模型补充

Microsoft OS 描述符分为以下部分:

  • 一个 Microsoft OS 字符串描述符
  • 一个或多个 Microsoft OS 功能描述符

若要支持 OS 描述符,设备必须实现字符串描述符。 字符串描述符

Microsoft OS 字符串描述符是存储在字符串索引0xEE的字符串。 此字符串的格式已明确定义。

Microsoft OS 字符串描述符用于实现以下目标

  • Microsoft OS 字符串描述符的存在向操作系统表明,设备中嵌入了 Microsoft OS 功能描述符形式的信息。
  • Microsoft OS 字符串描述符具有嵌入的签名字段,用于将其与可能恰好位于设备上字符串索引0xEE的随机字符串区分开来。
  • Microsoft OS 字符串描述符还具有一个嵌入的版本号,允许将来对 Microsoft OS 描述符进行修订。

设备上仅存储一个 Microsoft OS 字符串描述符。 以下部分介绍 Microsoft OS 字符串描述符的结构及其检索过程。 OS 字符串的结构

下面是字符串描述符的结构:

字符串描述符结构

字段 长度 (字节) 说明

bLength

1

0x12

描述符的长度

bDescriptorType

1

0x03

字符串描述符

qwSignature

14

“MSFT100”

签名域 (4D00530046005400310030003000)

bMS_VendorCode

1

供应商代码

用于提取其他 OS 功能描述符的供应商代码

bPad

1

0x00

Pad 字段

Microsoft OS 字符串描述符的结构在版本 1.00 中是固定的,其总长度为 18 个字节。 qwSignature 字段中列出了 Microsoft OS 字符串描述符的版本号。 存储在 bMS_VendorCode 字段中的信息必须是单个字节值。 它将用于检索 Microsoft OS 功能描述符,并且此字节值在 bmRequestType 字段中使用,如下所述:

检索 OS 字符串描述符

若要检索存储在字符串中的信息,必须向设备发出标准GET_DESCRIPTOR请求。 下面是请求的格式:

标准Get_Descriptor字符串请求

bmRequestType bRequest wValue wIndex wLength 数据

1000 0000b

GET_DESCRIPTOR

0x03EE

0x0000

0x12

返回字符串

bmRequestType 字段是由数据传输方向、描述符类型和接收方三部分组成的位图。 根据 USB 规范, bmRequestType 的值设置为 1000 0000b (0x80) 。

对于GET_DESCRIPTOR请求, wValue 字段拆分为两部分。 高字节存储描述符类型,低字节存储描述符索引。 若要检索 Microsoft OS 字符串描述符,应将高字节设置为检索字符串描述符 ,0x03。 由于 Microsoft OS 字符串描述符始终存储在索引0xEE处,因此此字符串索引应存储在 wValue 字段的下字节中。

wIndex 用于存储语言 ID,但对于 Microsoft OS 字符串描述符,它必须设置为零。

wLength 字段用于指示要检索的字符串描述符的长度。 设备应响应从 0x02 到 0xFF 的任何有效范围。

如果设备在 (0xEE) 的相应地址上没有有效的描述符,它将响应请求错误或停止。 当设备不响应时停止时,如果设备应进入未知状态) ,将向设备发出单端零重置, (恢复它。

验证 OS 描述符的完整性

由于允许供应商使用任何字符串 ID 来存储信息,因此操作系统必须验证存储在索引0xEE中的字符串是否确实是 Microsoft OS 字符串描述符。 为了验证这一点,将执行以下测试。 两者失败都会阻止检索 Microsoft OS 功能描述符。

  • 如果供应商将字符串存储在索引位置0xEE,操作系统将检索该字符串并对其进行查询,以查看它是否为 Microsoft OS 字符串。 可以通过将字符串中的签名字段与前面指定的签名字段条目进行比较来验证这一点。 不匹配会阻止进一步分析字符串。
  • 第二个测试将包括基于签名字段中指定的版本号验证字符串的长度。 字符串“MSFT100”) 中指定的 (版本号为 1.00。 这对应于 18 字节字符串描述符。

Microsoft OS 字符串描述符约束

以下约束适用于 Microsoft OS 字符串描述符及其检索:

  • 若要根据 Microsoft OS 描述符规范存储信息,设备必须具有一个且唯一符合 Microsoft OS 描述符中概述信息的 Microsoft OS 字符串描述符
  • 设备供应商可以免费使用 Microsoft OS 字符串描述符中 bMS_VendorCode 字段中的任何值

功能描述符

功能描述符是为特定目的定义的固定格式描述符。

检索 OS 功能描述符

若要检索 Microsoft OS 功能描述符,需要向设备发出特殊的GET_MS_DESCRIPTOR请求。 下面是请求的格式:

标准设备请求格式

bmRequestType bRequest wValue wIndex wLength 数据

1100 0000b

GET_MS_DESCRIPTOR

X

功能索引

Length

返回描述符

bmRequestType 字段是由数据传输方向、描述符类型和接收方三部分组成的位图,并且符合 USB 规范。 Microsoft OS 功能描述符是特定于供应商的描述符,数据传输方向是从设备传输到主机。 因此, bmRequestType 的值设置为 1100 0000b (0xC0) 。

bRequest 字段用于指示请求的格式。 若要检索 Microsoft OS 功能描述符,应使用特殊的GET_MS_DESCRIPTOR字节填充 bRequest 字段。 此字节的值由从 Microsoft 字符串描述符检索的 bMS_VendorCode指示。 有关检索 Microsoft OS 字符串描述符的详细信息,请参阅 检索 OS 字符串描述符

wValue 字段将特别使用,并分解为高字节和低字节。 高字节用于存储接口号。 这对于基于每个接口存储功能描述符至关重要,尤其是对于复合设备或具有 多个接口的设备。 在大多数情况下,将使用接口 0。 低字节用于存储页码。 此功能可防止描述符的大小边界为 64 KB, (由 wLength 字段) 的大小设置的限制。 将提取描述符,页面值最初设置为零。 如果收到) (大小的完整描述符为 64 KB,则页面值将增加 1,并且此时将再次发送对描述符的请求, (递增页值) 。 此过程将重复,直到收到大小小于 64 KB 的描述符。 请注意,最大页数为 255,这会将描述符大小限制为 16 MB。

wIndex 字段存储要检索的 Microsoft OS 功能描述符的功能索引号。 Microsoft 将维护此 Microsoft OS 功能描述符和索引列表。 若要了解有关 Microsoft OS 功能描述符的详细信息,请参阅 Microsoft OS 描述符

wLength 字段指定要提取的描述符的长度。 如果描述符长于 wLength 字段中所述的字节数,则仅返回描述符的初始字节。 如果短于 wLength 字段中指定的值,则返回短数据包。

如果不存在特定的 OS 描述符,设备将发出请求错误或停止。

Microsoft OS 功能描述符约束

以下约束适用于 Microsoft OS 功能描述符及其检索。

  • 所有 Microsoft OS 功能描述符都已定义和标准化。 未经 Microsoft 直接同意,不允许供应商修改、追加或创建 Microsoft OS 功能描述符。
  • 所有 Microsoft OS 功能描述符都将嵌入大小和版本号。 这些值应始终向操作系统报告正确的信息。
  • 设备固件中可以嵌入多个 Microsoft OS 功能描述符。
  • 某些 Microsoft OS 功能描述符存储在每个接口级别,而其他功能描述符则对于设备是唯一的。 设备级 Microsoft OS 功能描述符应将 wValue 字段的高字节设置为零。

功能描述符的结构

若要将自身标识为能够支持 MBIM,设备还必须支持扩展配置描述符,这是定义的功能描述符之一。 此描述符的结构如下所示。

标题部分

标头部分存储有关扩展配置描述符其余部分的信息。 dwLength 字段包含整个扩展配置描述符的长度。 标头部分还包含版本号,该版本号最初将设置为 1.00 (0100H) 。 此描述符的未来修订可能会在以后发布。 请注意,扩展配置描述符的未来版本可能还需要增加标头部分中的条目数,因此请验证此数字是否准确存储在设备中并由操作系统读取。

扩展配置描述符标头部分

Offset 字段 大小 说明

0

dwLength

4

无符号 DWORD

length 字段描述扩展配置描述符的长度(以字节为单位)。

4

bcdVersion

2

BCD

二进制编码十进制 (中的扩展配置描述符版本号,例如,版本 1.00 为 0100H) 。

6

wIndex

2

WORD

已修复 = 0x0004

8

bCount

1

BYTE

标头部分后面的函数节总数 = 0x01

9

RESERVED

7

RESERVED

函数部分

函数部分提供两条重要的信息。 它将用于类似用途的连续接口分组到函数组中,并为每个函数提供兼容和次不兼容的 ID。

下面是函数部分的格式,包括 MBIM 设备应使用的值:

扩展配置描述符函数部分

Offset¹ 字段 大小 说明

0

bFirstInterfaceNumber

1

Byte

此函数的起始接口号 = 0x00

1

bInterfaceCount

1

Byte

必须从此函数包含到 的接口总数 = 0x01

2

compatibleID

8

字节

兼容 ID

10

subCompatibleID

8

字节

子不兼容 ID

18

RESERVED

6

RESERVED = 0

¹ 自定义属性节的Offset 已重置为零。 若要计算字段与扩展配置描述符开头的偏移量,请添加其前面的部分的长度。

基于公开 MBIM 函数的配置的兼容 ID 和子兼容 ID

bConfiguration compatibleID subCompatibleID

2

ALTRCFG

(0x41 0x4C 0x54 0x52 0x43 0x46 0x47 0x00)

20000000

(0x32 0x00 0x00 0x00 0x00 0x00 0x00 0x00)

3

ALTRCFG

(0x41 0x4C 0x54 0x52 0x43 0x46 0x47 0x00)

30000000

(0x33 0x00 0x00 0x00 0x00 0x00 0x00 0x00)

4

ALTRCFG

(0x41 0x4C 0x54 0x52 0x43 0x46 0x47 0x00)

40000000

(0x34 0x00 0x00 0x00 0x00 0x00 0x00 0x00)

  • bConfiguration 是指公开 MBIM 函数的配置的 USB 配置描述符中的 bConfiguration 值。 bConfiguration 不能为 1,因为这是仅公开 CDROM 函数的默认配置。 bConfiguration 不能大于 4;也就是说,MBIM 函数应在前四个配置中公开。
  • compatibleID 对于所有配置保持不变。 subcompatibleID 根据配置更改

示例

下表显示了一个示例多配置方案。 下表列出了每个配置中可用的函数,以及不同版本的操作系统针对其中每个配置执行的操作:

多配置移动宽带设备示例

bConfiguration 1 (Windows-7 配置) 2 (IHV-NCM-1.0-Configuration) 3 (Windows-8-Configuration) 3 (IHV-NCM-2.0-Configuration)

公开的函数

CDROM

SD

CD-ROM

SD

NCM1.0

调制解调器

TV

GPS

FP

PC/SC 智能卡

语音

诊断

CD-ROM

SD

MBIM

CD-ROM

SD

NCM2.0

调制解调器

TV

GPS

FP

PC/SC 智能卡

语音

诊断

下表显示了用于上一示例的多配置方案的 Microsoft OS 字符串描述符和 Microsoft OS 扩展配置功能描述符使用的值。

多配置移动宽带设备示例

字段 长度 (字节)

bLength

1

0x12

bDescriptorType

1

0x03

qwSignature

14

“MSFT100”

0x4D 0x00 0x53 0x00 0x46 0x00 0x54 0x00 0x31 0x00 0x30 0x00 0x30 0x00

bMS_VendorCode

1

0xA5

bPad

1

0x00

示例 Microsoft OS 扩展配置功能描述符标头

Offset 字段 大小

0

dwLength

4

16

4

bcdVersion

2

0100H

6

wIndex

2

0x0004

8

bCount

1

1

9

RESERVED

7

示例 Microsoft OS 扩展配置功能描述符函数

Offset² 字段 大小

0

bFirstInterfaceNumber

1

1

bInterfaceCount

1

2

compatibleID

8

10

subCompatibleID

8

18

RESERVED

6

² 自定义属性节的Offset 已重置为零。 若要计算字段与扩展配置描述符开头的偏移量,请添加其前面的部分的长度。