MB 接口模型补充

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

  • 一个 Microsoft 操作系统字符串描述符
  • 一个或多个 Microsoft OS 功能描述符

若要支持操作系统描述符,设备必须实现字符串说明符。 字符串描述符

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

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

  • 如果存在 Microsoft 操作系统字符串描述符,则会向操作系统显示设备嵌入信息的操作系统,其形式为 Microsoft OS 功能描述符。
  • Microsoft OS 字符串描述符具有嵌入的签名字段,该字段用于将其与在字符串索引0xEE 的设备上可能发生的随机字符串区分开来。
  • Microsoft 操作系统字符串描述符还具有嵌入的版本号,可供将来的 Microsoft 操作系统描述符版本使用。

设备上只存储一个 Microsoft OS 字符串描述符。 以下各节描述了 Microsoft 操作系统字符串描述符及其检索过程的结构。 OS 字符串的结构

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

字符串描述符结构

字段 长度 (字节) Value 说明

bLength

1

0x12

描述符的长度

bDescriptorType

1

0x03

字符串描述符

qwSignature

14

"MSFT100"

签名字段 (4D00530046005400310030003000)

bMS_VendorCode

1

供应商代码

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

bPad

1

0x00

填充字段

Microsoft 操作系统字符串描述符的结构在版本1.00 中是固定的,总长度为18个字节。 Microsoft OS 字符串描述符的版本号在 qwSignature 字段中列出。 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 操作系统字符串描述符始终存储在索引0xEE 上,因此,此字符串索引应存储在 wValue 字段的下一个字节。

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

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

如果设备在相应的地址上没有有效的描述符 (0xEE) ,则它将响应请求错误或停止。 如果设备未使用延迟进行响应,则会将单结束的零重置发送到设备 (进行恢复,如果它应进入未知状态) 。

验证操作系统描述符的完整性

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

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

Microsoft OS 字符串描述符约束

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

  • 若要存储符合 Microsoft OS 描述符规范的信息,该设备必须有一个且仅有一个 Microsoft 操作系统字符串描述符,该描述符符合 MICROSOFT 操作系统描述符中列出的信息。
  • 设备供应商可以在 Microsoft OS 字符串描述符的 " bMS_VendorCode " 字段中随意使用任何值

功能描述符

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

检索 OS 功能描述符

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

标准设备请求格式

bmRequestType bRequest wValue wIndex wLength 数据

1100 0000b

GET_MS_DESCRIPTOR

X

功能索引

长度

返回描述符

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

bRequest 字段用于指示请求的格式。 若要检索 Microsoft OS 功能描述符, bRequest 字段应填充一个GET_MS_DESCRIPTOR字节。 此字节的值由从 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 设备应该使用的值:

扩展的配置描述符函数节

偏移量 字段 大小 说明

0

bFirstInterfaceNumber

1

Byte

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

1

bInterfaceCount

1

Byte

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

2

compatibleID

8

字节

兼容 ID

10

subCompatibleID

8

字节

Subcompatible ID

18

RESERVED

6

RESERVED = 0

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

基于公开 MBIM 函数的配置的兼容和 Subcompatible Id

bConfiguration compatibleID subCompatibleID

2

ALTRCFG

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

20000000

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

3

ALTRCFG

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

30000000

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

4

ALTRCFG

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

40000000

(0x34 赋 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-配置) 3 (Windows-8-配置) 3 (IHV-NCM-2.0-Configuration)

公开的函数

CDROM

SD

CD-ROM

SD

NCM 1。0

调制解调器

TV

GPS

FP

PC/SC 智能卡

语音

CD-ROM

SD

MBIM

CD-ROM

SD

NCM 2。0

调制解调器

TV

GPS

FP

PC/SC 智能卡

语音

下表显示了 Microsoft 操作系统字符串描述符使用的值,以及以前的示例多配置方案的 Microsoft 操作系统扩展配置功能描述符。

多配置移动宽带设备的示例

字段 长度 (字节) Value

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 操作系统扩展配置功能描述符标头

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 已重置为零。 若要计算字段与扩展配置描述符开头的偏移量,请添加字段之前部分的长度。