Microsoft は、Microsoft OS 記述子 (MOD) と呼ばれる、独自のデバイス クラスと USB 記述子のセットを提供します。
複数のハードウェア機能を含むデバイスの急速な出現により、多くの製造元は、現在のユニバーサル シリアル バス (USB) デバイス クラスのいずれにもデバイスが快適に収まらないことに気が付いています。 これは、デバイスのクラスに応じたドライバソフトウェアの標準化という、USB技術の魅力的な機能の一つをそのようなメーカーから奪ってしまいます。 Windows では、標準の USB デバイス クラスに属するほとんどのデバイスにネイティブ クラス ドライバーが用意されており、これらのドライバーを使用すると、エンド ユーザーは特別なソフトウェアをインストールしなくても、このようなデバイスをコンピューターに簡単に接続できます。
デバイスが現在の USB デバイス クラスのセットに適合しない製造元に対応するために、Microsoft は Microsoft OS 記述子 (MOD) と呼ばれる独自のデバイス クラスと USB 記述子のセットを開発しました。 アプリケーションとシステム ソフトウェアの両方で、デバイスにクエリを実行して、MOD をサポートしているかどうかを判断することで、Microsoft が定義したデバイス クラスに属するデバイスを識別できます。
Microsoft OS 記述子には、独自のデバイス クラスをサポートする以外の重要な用途があります。 特に、デバイス ファームウェアから最大限のメリットを得るためのメカニズムを提供します。 Microsoft OS 記述子の助けを借りて、ファームウェアを使用して、インストールを容易にし、顧客満足度を向上させるために必要なヘルプ ファイル、特別なアイコン、Uniform Resource Locators (URL)、レジストリ設定、その他のデータを提供できます。 場合によっては、フロッピー ディスクや CD などのストレージ メディアを見送ることができます。これにより、アップグレードの配信とサポートが簡略化されます。
オペレーティング システムのサポート
Microsoft OS 1.0 記述子は、以下でサポートされています。
- ウィンドウズ11
- Windows 10
- Windows 8.1
- Windows 8
- Windows 7
- Windows Vista、Windows Server 2008
- Windows XP Service Pack 1 (SP1)、Windows Server 2003
Microsoft OS 2.0 記述子は、以下でサポートされています。
- ウィンドウズ11
- Windows 10
- 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 1.0 記述子の仕様」を参照してください。
Windows でサポートされている OS 機能記述子の種類は何ですか?
機能記述子として格納される情報は、Microsoft が定義した標準形式のいずれかに準拠している必要があります。 その他の機能記述子は、Microsoft の同意なしに定義または実装することはできません。 Microsoft では、次の機能記述子を定義しました。
- 拡張互換性 ID。 Windows では、クラスコードとサブクラス コードを使用して、USB デバイス用の適切な既定のドライバーを見つけるのに役立ちます。 ただし、USB デバイス作業グループは、これらのコードを割り当てる必要があります。 つまり、新しい種類の機能を実装するデバイスには、多くの場合、適切なクラスコードとサブクラス コードがまだないため、Windows ではコードを使用して既定のドライバーを選択することはできません。 IHV は、拡張互換 ID OS 機能記述子としてファームウェアに情報を格納することで、この問題を回避できます。 Windows は、デバイスが接続されているときにこの情報を取得し、それを使用して、読み込む既定のドライバーを特定できます。
- 拡張プロパティ。 現在、USB デバイスに対してプロパティを宣言できるレベルは、クラス レベルと devnode レベルの 2 つあります。 拡張プロパティ OS 機能記述子を使用すると、ベンダーは、ヘルプ ページ、URL、アイコンなどの追加のプロパティをデバイス ファームウェアに格納できます。