USB デバイス向けの Microsoft OS 記述子

まとめ

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

複数のハードウェア機能を含むデバイスが急速に発生しているため、多くの製造元は、デバイスが現在のユニバーサルシリアルバス (USB) デバイスクラスに十分に適合していないことを確認しています。 これにより、USB テクノロジの最も魅力的な機能の1つである deprives の製造元が、(デバイスのクラスに従って) ドライバーソフトウェアの標準化を行うことができます。 Microsoft Windows は、標準の USB デバイスクラスに属するほとんどのデバイスにネイティブクラスのドライバーを提供します。これらのドライバーを使用すると、エンドユーザーは、特別なソフトウェアをインストールしなくても、このようなデバイスをコンピューターに簡単に接続できます。

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

Microsoft OS 記述子には、独自のデバイスクラスをサポートする以外に、重要な使用方法があります。 具体的には、デバイスのファームウェアから最大のメリットを引き出すためのメカニズムが用意されています。 Microsoft OS 記述子を利用すると、ファームウェアを使用して、ヘルプファイル、特別なアイコン、Uniform Resource locator (Url)、レジストリ設定、およびインストールを容易にし、顧客満足度を高めるために必要なその他のデータを配信できます。 場合によっては、フロッピーディスクや Cd などの記憶域メディアを済ませるすることができます。これにより、アップグレードの配信とサポートが容易になります。

Operating-System サポート

Microsoft OS 1.0 記述子は次のものでサポートされます。

  • Windows 8.1
  • Windows 8
  • Windows 7
  • Windows Vista、Windows Server 2008
  • WindowsXP 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 機能記述子を取得するために必要なデータが含まれています。
  • これには、Ihv が0xEE で格納することを選択した他の文字列と OS 文字列記述子を区別する署名フィールドが含まれています。
  • これには、Microsoft OS 記述子の将来のリビジョンで使用できるバージョン番号が含まれています。

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

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

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

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

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

HLKM \ SYSTEM \ CurrentControlSet \ コントロールの \ usbflags \ * vvvvpppprrrrr*

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

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

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

Windows では、どのような種類の OS 機能記述子がサポートされていますか。

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

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

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