MB インターフェイス モデルに関する補足条項

Microsoft OS 記述子は、次のセグメントに分割されます。

  • 1 つの Microsoft OS 文字列記述子
  • 1 つ以上の Microsoft OS 機能記述子

OS 記述子をサポートするには、デバイスが文字列記述子を実装する必要があります。 文字列記述子

Microsoft OS 文字列記述子は、文字列インデックス 0xEE に格納される文字列です。 この文字列の形式は適切に定義されています。

Microsoft OS 文字列記述子は、次の目的を達成するために使用されます

  • Microsoft OS 文字列記述子は、デバイスに情報が埋め込まれているオペレーティング システムに、Microsoft OS 機能記述子の形式で示します。
  • Microsoft OS 文字列記述子には、文字列インデックス 0xEE でデバイス上に生まれる可能性があるランダムな文字列と区別するために使用される埋め込み署名フィールドがあります。
  • Microsoft OS 文字列記述子には、Microsoft OS 記述子の将来のリビジョンを可能にするバージョン番号も埋め込まれています。

デバイスに格納される Microsoft OS 文字列記述子は 1 つだけです。 次のセクションでは、Microsoft OS 文字列記述子の構造とその取得手順について説明します。 OS 文字列の構造

文字列記述子の構造を次に示します。

文字列記述子構造

フィールド 長さ (バイト数) 説明

bLength

1

0x12

記述子の長さ

bDescriptorType

1

0x03

文字列記述子

qwSignature

14

"MSFT100"

署名フィールド (4D00530046005400310030003000)

bMS_VendorCode

1

ベンダー コード

他の OS 機能記述子をフェッチするベンダー コード

bPad

1

0x00

パッド フィールド

Microsoft OS 文字列記述子の構造は、バージョン 1.00 で修正され、全長は 18 バイトです。 Microsoft OS 文字列記述子のバージョン番号は、qwSignature フィールドに一覧表示されます。 bMS_VendorCode フィールドに格納される情報は、1 バイト文字であることが必要です。 これは Microsoft OS 機能記述子の取得に使用され、このバイト値は次のように記述されている bmRequestType フィールドで使用されます。

OS 文字列記述子の取得

文字列に格納されている情報を取得するには、標準の GET_DESCRIPTOR 要求をデバイスに発行する必要があります。 要求の形式は次のとおりです。

標準 Get_Descriptor 文字列要求

bmRequestType bRequest wValue wIndex wLength データ

1000 0000b

GET_DESCRIPTOR

0x03EE

0x0000

0x12

string が返されます。

bmRequestType フィールドは、データ転送の方向、記述子タイプ、受信者といった 3 つの部分で構成されるビットマップです。 USB 仕様に従って、bmRequestType の値は 1000 0000b (0x80) に設定されます。

GET_DESCRIPTOR 要求の場合、wValue フィールドは 2 つの部分に分割されます。 上位バイトには記述子タイプが格納され、下位バイトには記述子インデックスが格納されます。 Microsoft OS 文字列記述子を取得するには、高バイトを設定して文字列記述子 (0x03) を取得することになります。 Microsoft OS 文字列記述子は常にインデックス 0xEE に格納されるため、この文字列インデックスは wValue フィールドの下位バイトに格納することになります。

wIndex は言語 ID を格納するために使用されますが、Microsoft OS 文字列記述子の場合は 0 に設定する必要があります。

wLength フィールドは、取得する文字列記述子の長さを示すために使用されます。 デバイスは、0x02 から 0xFF までの任意の有効範囲に応答することになります。

デバイスは、対応アドレス (0xEE) で有効な記述子を持たない場合、要求エラーまたはストールで応答します。 デバイスがストールで応答しない場合、デバイスにシングルエンドのゼロ リセットが発行されます (不明な状態になった場合のデバイスをリカバリするため)。

OS 記述子の整合性の検証

ベンダーは任意の文字列 ID を使用して情報を格納できるため、オペレーティング システムはインデックス 0xEE に格納されている文字列が実際に Microsoft OS 文字列記述子であることを検証する必要があります。 これを検証するには、次のテストを行います。 いずれかが失敗すると、Microsoft OS 機能記述子の取得が禁止されます。

  • ベンダーがインデックスの場所 0xEE に文字列を格納している場合、オペレーティング システムは文字列を取得してクエリを実行し、それが Microsoft OS 文字列かどうかを検証します。 この検証では、文字列内の署名フィールドと、前に指定した署名フィールド エントリを比較します。 一致しない場合は、文字列をさらに解析できなくなります。
  • 2 番目のテストには、署名フィールドで指定されたバージョン番号に基づいて、文字列の長さの検証が含まれます。 指定されたバージョン番号 (文字列 "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 フィールドは、データ転送の方向、記述子タイプ、受信者といった 3 つの部分で構成されるビットマップであり、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 フィールドの上位バイトを 0 に設定することになります。

機能記述子の構造

MBIM をサポートできるものとして自身を識別するために、デバイスは、定義されている機能記述子の 1 つである拡張構成記述子もサポートする必要があります。 この記述子の構造は次のとおりです。

ヘッダー セクション

ヘッダー セクションには、拡張構成記述子の残り部分に関する情報が格納されます。 dwLength フィールドには、拡張構成記述子全体の長さが含まれます。 ヘッダー セクションにはバージョン番号も含まれ、最初は 1.00 (0100H) に設定されます。 この記述子の今後のリビジョンは、後の段階でリリースされる可能性があります。 拡張構成記述子の将来のバージョンでは、ヘッダー セクションのエントリの数を増やすことが必要な場合もあるため、この数がデバイスに正確に格納され、オペレーティング システムによって読み取られたことを確認してください。

拡張構成記述子ヘッダー セクション

オフセット フィールド サイズ 説明

0

dwLength

4

符号なし DWORD

length フィールドは、拡張構成記述子の長さをバイト単位で記述します。

4

bcdVersion

2

BCD

2 進化 10 進数の拡張構成記述子リリース番号 (たとえば、バージョン 1.00 は 0100H)。

6

wIndex

2

WORD

固定 = 0x0004

8

bCount

1

BYTE

ヘッダー セクションに続く機能セクションの合計数 = 0x01

9

RESERVED

7

RESERVED

機能セクション

機能セクションには、2 つの重要な情報が含まれています。 同様の目的を果たす連続するインターフェイスを機能グループにグループ化し、各機能に互換 ID と準互換 ID を提供します。

MBIM デバイスで使用される値を含む機能セクションの形式を次に示します。

拡張構成記述子機能セクション

オフセット フィールド サイズ 説明

0

bFirstInterfaceNumber

1

Byte

この機能の開始インターフェイス番号 = 0x00

1

bInterfaceCount

1

Byte

この機能から含める必要があるインターフェイスの合計数 = 0x01

2

compatibleID

8

バイト

互換性 ID

10

subCompatibleID

8

バイト

準互換 ID

18

RESERVED

6

RESERVED = 0

¹カスタム プロパティ セクションのオフセットは 0 にリセットされています。 拡張構成記述子の先頭からフィールドのオフセットを計算するには、その前のセクションの長さを追加します。

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 より大きくすることはできません。つまり、最初の 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

Modem

TV

GPS

FP

PC/SC スマート カード

音声

Diag

CD-ROM

SD

MBIM

CD-ROM

SD

NCM2.0

Modem

TV

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 拡張構成機能記述子ヘッダーの例

オフセット フィールド サイズ

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

²カスタム プロパティ セクションのオフセットは 0 にリセットされています。 拡張構成記述子の先頭からフィールドのオフセットを計算するには、その前のセクションの長さを追加します。