次の方法で共有


USB デバイスのための Microsoft OS 記述子

まとめ

マイクロソフトは、Microsoft OS 記述子 (MOD) と呼ばれる、独自のデバイス クラスと USB 記述子のセットを提供しています。

複数のハードウェア機能を備えたデバイスが急速に出現しているため、多くのメーカーは、自社のデバイスが現在のユニバーサル シリアル バス (USB) デバイス クラスのいずれにもうまく適合しないことに気づきました。 これにより、このようなメーカーは、USB テクノロジの最も魅力的な機能の 1 つである、(デバイスのクラスに応じた) ドライバ ソフトウェアの標準化を奪うことになります。 Microsoft Windows は、標準 USB デバイス クラスに属するほとんどのデバイスにネイティブ クラス ドライバーを提供しており、これらのドライバーを使用すると、エンド ユーザーは特別なソフトウェアをインストールすることなく、そのようなデバイスをコンピューターに簡単に接続できます。

現在の USB デバイス クラスのセットにデバイスが適合しないメーカーに対応するために、Microsoft Corporation は、Microsoft OS 記述子 (MOD) と呼ばれる独自のデバイス クラスと USB 記述子のセットを開発しました。 アプリケーションとシステム ソフトウェアはどちらも、デバイスにクエリを実行して MOD をサポートしているかどうかを判断することで、Microsoft が定義したデバイス クラスに属するデバイスを識別できます。

Microsoft OS 記述子には、独自のデバイス クラスをサポートする以外の重要な用途があります。 特に、デバイス ファームウェアから最大限のメリットを得るためのメカニズムを提供します。 Microsoft OS 記述子の助けを借りて、ファームウェアを使用して、ヘルプ ファイル、特別なアイコン、ユニフォーム リソース ロケーター (URL)、レジストリ設定、およびインストールを容易にし顧客満足度を高めるために必要なその他のデータを提供できます。 場合によっては、フロッピー ディスクや CD などの記憶メディアを省略できるため、アップグレードの提供とサポートが簡素化されます。

オペレーティング システムのサポート

Microsoft OS 1.0 記述子は、次の方法でサポートされています。

  • Windows 8.1
  • Windows 8
  • Windows 7
  • Windows Vista、Windows Server 2008
  • Windows XP with Service Pack 1 (SP1)、Windows Server 2003

Microsoft OS 2.0 記述子は、次の方法でサポートされています。

  • Windows 8.1

Windows が 0xEE にインデックスを付けるために文字列記述子要求を発行するのはなぜですか?

Microsoft OS 記述子をサポートするデバイスは、ファームウェアの固定文字列インデックス 0xEE に特別な USB 文字列記述子を保存する必要があります。 この文字列記述子は、Microsoft OS 文字列記述子と呼ばれます。

  • その存在は、デバイスに 1 つ以上の OS 機能記述子が含まれていることを示します。
  • 関連付けられている OS 機能記述子を取得するために必要なデータが含まれています。
  • これには、OS 文字列記述子を、IHV が 0xEE に保存するために選択する可能性のある他の文字列と区別する署名フィールドが含まれています。
  • これには、Microsoft OS 記述子の将来のリビジョンを可能にするバージョン番号が含まれています。

0xEE に文字列記述子がない場合、またはそのインデックスの文字列記述子が有効な OS 文字列記述子ではない場合、Windows はデバイスに OS 機能記述子が含まれていないと想定します。

新しいデバイスが初めてコンピューターに接続されると、Microsoft OS 記述子をサポートするオペレーティング システムは、インデックス 0xEE にある文字列記述子を要求します。 Microsoft OS 文字列記述子には、オペレーティング システムがインデックス 0xEE にある他の文字列と区別するために使用する埋め込み署名フィールドが含まれています。 インデックス 0xEE に適切な署名フィールドを含む文字列記述子が存在すると、デバイスが Microsoft OS 記述子をサポートしていることがオペレーティング システムに示されます。 Microsoft OS 文字列記述子は、オペレーティング システムにもバージョン情報を提供します。

オペレーティング システムは、デバイスの列挙中 (デバイスのドライバーが読み込まれる前)、インデックス 0xEE の文字列記述子をクエリします。これにより、一部のデバイスが誤動作する可能性があります。 このようなデバイスは、Microsoft OS 記述子をサポートする Windows オペレーティング システムのバージョンではサポートされません。

デバイスのインデックス 0xEE に有効な文字列記述子が含まれていない場合は、ストール パケット (つまり、タイプ STALL のパケット識別子を含むパケット) で応答する必要があります。これについては、「リクエスト エラー」セクションで説明されています。 ユニバーサル シリアル バス仕様。 デバイスがストール パケットで応答しない場合、システムはシングルエンド ゼロ リセット パケットをデバイスに発行して、デバイスがストール状態から回復できるようにします (Windows XP のみ)。

オペレーティング システムは、デバイスから Microsoft OS 文字列記述子を要求した後、次のレジストリ キーを作成します。

HLKM\SYSTEM\CurrentControlSet\Control\UsbFlags\vvvvpppprrrrr

オペレーティング システムは、デバイスが Microsoft OS 記述子をサポートしているかどうかを示す osvc という名前のレジストリ エントリをこのレジストリ キーの下に作成します。 オペレーティング システムが Microsoft OS 文字列記述子を初めてデバイスに照会したときにデバイスが有効な応答を提供しなかった場合、オペレーティング システムはその記述子に対してそれ以上の要求を行いません。

そのキーの下のレジストリ エントリについては、「USB デバイス のレジストリ エントリ」を参照してください。

詳細については、「Microsoft OS 記述子」を参照してください。

Windows でサポートされている OS 機能記述子の種類は何ですか?

機能記述子として保存される情報は、マイクロソフトが定義した標準形式のいずれかに準拠する必要があります。 マイクロソフトの同意なしに、追加の機能記述子を定義または実装することはできません。 マイクロソフトでは、次の機能記述子を定義しています。

  • 拡張互換 ID。 Windows は、クラス コードとサブクラス コードを使用して、USB デバイスに適切なデフォルト ドライバーを見つけやすくします。 ただし、USB デバイス作業グループは、これらのコードを割り当てる必要があります。 これは、新しいタイプの機能を実装するデバイスには適切なクラス コードとサブクラス コードがないことが多いため、Windows がコードを使用して既定のドライバーを選択できないことを意味します。 IHV は、情報を拡張互換 ID OS 機能記述子としてファームウェアに保存することで、この問題を回避できます。 Windows は、デバイスが接続されているときにこの情報を取得し、どのデフォルト ドライバーをロードするかを決定するために使用できます。
  • 拡張プロパティ。 現在、USB デバイスのプロパティを宣言できるレベルは、クラス レベルと Devnode レベルの 2 つあります。 拡張プロパティ OS 機能記述子を使用すると、ベンダーは、ヘルプ ページ、URL、アイコンなどの追加のプロパティをデバイス ファームウェアに格納できます。

Microsoft OS 1.0 記述子の仕様
Microsoft OS 2.0 記述子の仕様
Windows 用 USB デバイスの構築