USB デバイス用の Microsoft OS 記述子
マイクロソフトは、Microsoft OS 記述子 (MOD) と呼ばれる、独自のデバイス クラスと USB 記述子のセットを提供しています。
複数のハードウェア機能を含むデバイスの急速な出現により、多くの製造元は、現在のユニバーサル シリアル バス (USB) デバイス クラスのいずれにもデバイスが快適に収まらないことに気が付いています。 これにより、このようなメーカーは、USB テクノロジの最も魅力的な機能の 1 つである、(デバイスのクラスに応じた) ドライバ ソフトウェアの標準化を奪うことになります。 Windows では、標準の USB デバイス クラスに属するほとんどのデバイスにネイティブ クラス ドライバーが用意されており、これらのドライバーを使用すると、エンド ユーザーは特別なソフトウェアをインストールしなくても、このようなデバイスをコンピューターに簡単に接続できます。
デバイスが現在の USB デバイス クラスのセットに適合しない製造元に対応するために、Microsoft は Microsoft OS 記述子 (MOD) と呼ばれる独自のデバイス クラスと USB 記述子のセットを開発しました。 アプリケーションとシステム ソフトウェアはどちらも、デバイスにクエリを実行して MOD をサポートしているかどうかを判断することで、Microsoft が定義したデバイス クラスに属するデバイスを識別できます。
Microsoft OS 記述子には、独自のデバイス クラスをサポートする以外の重要な用途があります。 特に、デバイス ファームウェアから最大限のメリットを得るためのメカニズムを提供します。 Microsoft OS 記述子の助けを借りて、ファームウェアを使用して、ヘルプ ファイル、特別なアイコン、ユニフォーム リソース ロケーター (URL)、レジストリ設定、およびインストールを容易にし顧客満足度を高めるために必要なその他のデータを提供できます。 場合によっては、フロッピー ディスクや CD などの記憶メディアを省略できるため、アップグレードの提供とサポートが簡素化されます。
オペレーティング システムのサポート
Microsoft OS 1.0 記述子は、以下でサポートされています。
- Windows 11
- Windows 10
- 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 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、アイコンなどの追加のプロパティをデバイス ファームウェアに格納できます。