共用方式為


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 字串描述元的結構及其擷取程式。 作業系統字串的結構

以下是字串描述元的結構:

字串描述元結構

領域 長度 (位元組) 價值觀 說明

bLength (長度)

1

0x12

描述元的長度

bDescriptorType

1

0x03

字串描述元

qw簽名

14

“MSFT100”

簽名欄位 (4D00530046005400310030003000)

bMS_VendorCode

1

供應商代碼

用於擷取其他作業系統功能描述元的廠商程式碼

bPad

1

0x00

填充欄位

Microsoft OS 字串描述元的結構已針對 1.00 版進行固定,總長度為 18 個位元組。 Microsoft OS 字串描述元的版本號碼會列在 qwSignature 欄位中。 儲存在 bMS_VendorCode 欄位中的資訊必須是單一位元組值。 它將用於擷取 Microsoft OS 功能描述元,此位元組值用於 bmRequestType 欄位中,說明如下:

擷取作業系統字串描述元

若要擷取儲存在字串中的資訊,必須向裝置發出標準GET_DESCRIPTOR要求。 以下是請求的格式:

標準Get_Descriptor字串要求

bmRequestType bRequest wValue wIndex wLength 資料

1000 0000億

GET_DESCRIPTOR

0x03EE

0x0000

0x12

傳回字串

bmRequestType 欄位是由三個部分組成的點陣圖:資料傳輸方向、描述元類型和收件者。 根據 USB 規格, bmRequestType 的值會設定為 1000 0000b (0x80)。

針對GET_DESCRIPTOR要求, wValue 欄位會分割成兩個部分。 高位元組儲存描述元類型,低位元組儲存描述元索引。 若要擷取 Microsoft 作業系統字串描述元,需設定高位元組來擷取字串描述元 0x03。 因為Microsoft OS 字串描述元一律儲存在索引0xEE,所以此字串索引應該儲存在 wValue 欄位的較低位元組中。

wIndex 可用來儲存語言識別碼,但必須針對 Microsoft OS 字串描述元設定為零。

wLength 欄位可用來指出要擷取的字串描述子長度。 裝置應該回應任何從 0x02 到 0xFF 的有效數值範圍。

如果裝置在對應位址 (0xEE) 上沒有有效的描述符,它將以請求錯誤或停滯來回應。 當裝置沒有回應停止時,會向裝置發出單端零重設,以恢復運作(如果裝置進入未知狀態)。

驗證作業系統描述元的完整性

因為廠商可以使用任何字串識別碼來儲存資訊,所以作業系統必須確認儲存在索引0xEE中的字串確實是Microsoft OS 字串描述元。 為了驗證這一點,將進行以下測試。 任一失敗都會禁止擷取 Microsoft OS 功能描述元。

  • 如果廠商將字串儲存在索引位置0xEE,作業系統會擷取字串並查詢它,以查看它是否是Microsoft作業系統字串。 這可以透過將字串中的簽章欄位與先前指定的簽章欄位項目進行比較來驗證。 不匹配會阻止進一步解析該字串。
  • 第二個測試將包括根據簽名欄位中指定的版本號驗證字串的長度。 指定的版本號碼 (在字串 “MSFT100” 中) 為 1.00。 這對應於 18 位元組的字串描述元。

Microsoft OS 字串描述元條件約束

下列條件約束適用於 Microsoft OS 字串描述元及其擷取:

  • 若要儲存符合 Microsoft OS 描述元規格的資訊,裝置必須有一個且唯一符合 Microsoft OS 描述元中所述資訊的 Microsoft OS 字串描述元。
  • 裝置廠商可以自由使用 Microsoft OS 字串描述元中 bMS_VendorCode 欄位中的任何值

功能描述元

功能描述子是針對特定用途定義的固定格式描述子。

擷取作業系統功能描述元

若要擷取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 位元組。 此位元組的值由 bMS_VendorCode 表示,它是從 Microsoft 字串描述元擷取的。 如需擷取 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 欄位中指定的值,則會傳回短封包。

如果特定作業系統描述元不存在,裝置將發出請求錯誤或停止。

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

長度欄位描述延伸配置描述子的長度 (以位元組為單位)。

4

bcdVersion

2

BCD

二進位編碼十進制的擴展配置描述符版本號(例如,版本 1.00 為 0100H)。

6

wIndex

2

固定 = 0x0004

8

b計數

1

位元組

標頭區段後面的函式區段總數 = 0x01

9

已保留

7

已保留

功能區段

功能部分提供了兩個重要的信息。 它會將具有類似用途的連續介面分組到功能群組中,並為每個功能提供相容和次相容的 ID。

以下是函式區段的格式,包括 MBIM 裝置應該使用的值:

擴充組態描述子函式區段

偏移量¹ 領域 大小 價值觀 說明

0

bFirstInterfaceNumber 第一介面編號

1

位元

此功能的起始介面號碼 = 0x00

1

b介面計數

1

位元

此函式所需包含的介面總數 = 0x01

2

相容標識碼

8

字節

相容標識碼

10

subCompatibleID

8

字節

次相容識別碼

18

已保留

6

保留 = 0

¹自訂屬性部分的偏移量已重設為零。 若要計算欄位從延伸配置描述子開頭的偏移量,請新增其前面區段的長度。

相容和次相容的識別碼,以公開 MBIM 函式的設定為基礎

b組態 相容標識碼 子相容ID

2

阿爾特爾克福

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

20000000

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

3

阿爾特爾克福

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

30000000

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

4

阿爾特爾克福

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

40000000

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

  • bConfiguration 是指公開 MBIM 函式之組態之 USB 組態描述元內的 bConfiguration 值。 b配置 不能是 1,因為這是僅公開 CDROM 功能的預設配置。 b配置 不能大於 4;也就是說,MBIM 函式應該在前四個設定內公開。
  • compatibleID 對於所有組態都保持不變。 subcompatibleID 會根據組態而變更

範例

下表顯示範例多組態案例。 下表列出每個組態中可用的功能,以及不同版本的作業系統針對每個組態所採取的動作:

多組態行動寬頻裝置範例

b組態 1 (Windows-7 設定) 2 (IHV-NCM-1.0 組態) 3 (Windows 8 設定) 3 (IHV-NCM-2.0 組態)

公開的功能

CDROM

SD

CD-ROM

SD

NCM1.0

數據機

電視

GPS

Functional Programming (if "FP" stands for this, the translation would be 功能性程式設計)

PC/SC 智慧卡

Voice

Diag

CD-ROM

SD

MBIM

CD-ROM

SD

NCM2.0

數據機

電視

GPS

Functional Programming (if "FP" stands for this, the translation would be 功能性程式設計)

PC/SC 智慧卡

Voice

Diag

下表顯示 Microsoft OS 字串描述元和 Microsoft OS 擴充組態功能描述元所針對上一個範例的多組態案例所使用的值。

多組態行動寬頻裝置範例

領域 長度 (位元組) 價值觀

bLength (長度)

1

0x12

bDescriptorType

1

0x03

qw簽名

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

凌晨1點

6

wIndex

2

0x0004

8

b計數

1

1

9

已保留

7

範例 Microsoft OS 擴充組態功能描述元函式

偏移量² 領域 大小 價值觀

0

bFirstInterfaceNumber 第一介面編號

1

1

b介面計數

1

2

相容標識碼

8

10

subCompatibleID

8

18

已保留

6

²自訂屬性區段的偏移量已重設為零。 若要計算欄位從延伸配置描述子開頭的偏移量,請新增其前面區段的長度。