次の方法で共有


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

文字列を返します。

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 文字列記述子とその取得に適用されます。

機能記述子

機能記述子は、特定の目的のために定義された固定形式の記述子です。

OS 機能記述子の取得

Microsoft OS 機能記述子を取得するには、特別なGET_MS_DESCRIPTOR要求をデバイスに発行する必要があります。 要求の形式を次に示します。

標準デバイス要求フォーマット

bmRequestType bRequest wValue wIndex wLength データ

1100 0000b

GET_MS_DESCRIPTOR

X

特徴インデックス

長さ

記述子を返します。

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

単語

固定 = 0x0004

8

bCount

1

BYTE

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

9

予約済み

7

予約済み

機能セクション

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

MBIM デバイスで使用する必要がある値を含む関数セクションの形式を次に示します。

拡張コンフィギュレーションディスクリプター機能セクション

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

0

bFirstInterfaceNumber

1

Byte

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

1

bInterfaceCount

1

Byte

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

2

compatibleID

8

バイト

互換性のある ID

10

subCompatibleID

8

バイト

準互換 ID

18

予約済み

6

RESERVED(予約済み)= 0

¹ カスタム プロパティ セクションのOffset が 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 は、CDROM 関数のみを公開する既定の構成であるため、1 にすることはできません。 bConfiguration を 4 より大きくすることはできません。つまり、MBIM 関数は最初の 4 つの構成内で公開する必要があります。
  • 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

NCM1.0

モデム

テレビ

GPS

FP

PC/SC スマート カード

Voice

ダイアグ

CD-ROM

SD

MBIM

CD-ROM

SD

NCM2.0

モデム

テレビ

GPS

FP

PC/SC スマート カード

Voice

ダイアグ

次の表は、前のサンプルのマルチ構成シナリオで 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

予約済み

7

Microsoft OS 拡張構成機能記述子関数の例

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

0

bFirstInterfaceNumber

1

1

bInterfaceCount

1

2

compatibleID

8

10

subCompatibleID

8

18

予約済み

6

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