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 個位元組。 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 OS 字串描述元一律會儲存在索引0xEE,所以此字串索引應該儲存在 wValue 欄位的較低位元組中。
wIndex是用來儲存語言識別項,但 Microsoft OS 字串描述元必須設定為零。
wLength欄位用來指出要擷取的字串描述元長度。 裝置應該回應從0x02到0xFF的任何有效範圍。
如果裝置在對應的位址 (0xEE) 沒有有效的描述元,則會以要求錯誤或停止回應。 當裝置未回應停止時,如果裝置應該處於未知狀態) ,則會將單一結束的零重設發出給裝置 (以復原它。
驗證 OS 描述元的完整性
因為廠商可以使用任何字串識別碼來儲存資訊,所以作業系統必須確認儲存在索引中的字串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 |
功能索引 |
長度 |
傳回描述項 |
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) ,頁面值將會遞增一個,而且會再次傳送描述元的要求, (這次使用遞增的頁面值) 。 此程式會重複,直到收到大小小於 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 OS 功能描述項,而不需 Microsoft 的直接同意。
- 所有 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 |
Fixed = 0x0004 |
8 |
bCount |
1 |
BYTE |
標頭區段後的函式區段總數 = 0x01 |
9 |
已保留 |
7 |
已保留 |
函式區段
函式區段提供兩個重要的資訊片段。 它會將連續的介面分組成類似用途的函式群組,並為每個函式提供相容和子相容的識別碼。
以下是函式區段的格式,包括 MBIM 裝置應該使用的值:
擴充組態描述元函式區段
Offset¹ | 欄位 | 大小 | 值 | 描述 |
---|---|---|---|---|
0 |
bFirstInterfaceNumber |
1 |
Byte |
此函式的起始介面編號 = 0x00 |
1 |
bInterfaceCount |
1 |
Byte |
必須包含至此函式的介面總數 = 0x01 |
2 |
compatibleID |
8 |
位元組 |
相容的識別碼 |
10 |
subCompatibleID |
8 |
位元組 |
子相容性識別碼 |
18 |
已保留 |
6 |
RESERVED = 0 |
自訂屬性區段的 ¹Offset 已重設為零。 若要從擴充組態描述元的開頭計算欄位的位移,請新增其前面的區段長度。
以公開 MBIM 函式的組態為基礎的相容和子相容識別碼
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-Configuration) | 2 (IHV-NCM-1.0-Configuration) | 3 (Windows-8-Configuration) | 3 (IHV-NCM-2.0-Configuration) |
---|---|---|---|---|
公開的函式 |
CDROM SD |
CD-ROM SD NCM1.0 數據機 電視 GPS FP PC/SC 智慧卡 語音 Diag |
CD-ROM SD MBIM |
CD-ROM SD NCM2.0 數據機 電視 GPS FP PC/SC 智慧卡 語音 Diag |
下表顯示 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 |
已保留 |
7 |
範例 Microsoft OS 擴充組態功能描述項函式
Offset¹ | 欄位 | 大小 | 值 |
---|---|---|---|
0 |
bFirstInterfaceNumber |
1 |
|
1 |
bInterfaceCount |
1 |
|
2 |
compatibleID |
8 |
|
10 |
subCompatibleID |
8 |
|
18 |
已保留 |
6 |
自訂屬性區段的 ¹Offset 已重設為零。 若要從擴充組態描述元的開頭計算欄位的位移,請新增其前面的區段長度。