Windows の USB デバイス側ドライバー

USB 関数スタックのアーキテクチャについて説明します。

USB デバイスでは、USB 関数スタックは、ACPI が USB デバイス物理デバイス オブジェクト (PDO) を作成するときに、プラグ アンド プレイ Manager によって列挙されるドライバーのグループを参照します。

1 つの構成デバイスでは、USB デバイスで 1 つ以上のインターフェイスを定義できます。 たとえば、デバイス間でファイルを転送するメディア転送プロトコル (MTP) です。 複合 USB デバイスは、1 つの構成で複数のインターフェイスをサポートできます。 USB 関数スタックはインターフェイスごとに PDO を作成し、PnP マネージャーは、そのインターフェイスの関数デバイス オブジェクト (FDO) を作成するクラス ドライバーを読み込む。

USB 関数スタックは、次の図で概念化されています。

usb 関数スタック。

アプリケーションとサービス

  • すべてのユーザー モード要求は、Microsoft が提供するカーネル モード クラス ドライバードライバーに送信GenericUSBFn.sys。 genericusbfnioctl.hで定義されている I/O 制御コード (IOCTL) を送信することで、GenericUSBFn.sys と通信するユーザー モード サービスを作成できます。 これらの IOCTL の詳細については、「ユーザー モード サービスからの GenericUSBFn.sys との通信」を参照してください。

USB 関数クラス ドライバー

USB 関数クラス ドライバーは、USB デバイス上の特定のインターフェイス (またはインターフェイスのグループ) の機能を実装します。 MTP と IpOverUsb は、システムによって提供されるクラス ドライバーの例です。 クラス ドライバーは、カーネル モード ドライバーとして純粋に実装される場合や、システムが提供するクラス ドライバードライバーと組み合GenericUSBFn.sys。

関数クラス ドライバーは、USB 関数クラス ドライバーを使用して、UFX プログラミング インターフェイス に要求 をコントローラーに送信します

USB 関数クラス拡張 (UFX)

USB 関数クラス拡張機能 (UFX) は、システムが提供する KMDF (カーネルモード ドライバー フレームワーク 拡張機能です。 USB は標準バスであり、必要な機能と機能がいくつか備え付けされています。 UFX は、すべての USB 関数コントローラーに共通の USB 関数ロジックの実装と、USB 関数クラス ドライバーからの要求の処理やディスパッチを担当します。 特に、UFX は、デバイスを列挙し、標準の制御転送を処理するプロセスを処理します。 これらの操作の一部を実行するには、UFX がバスの機能について把握している必要があります。 これらの機能は、クラス拡張インターフェイスが確立されると UFX に報告されます。

UFX は、上位レイヤー (USB 関数クラス ドライバーおよびユーザー モード サービス) がコントローラーに要求を送信するために使用できる標準 IOCTL を公開します。 さらに、UFX は、ホストから受信した標準要求について上位層に通知します。

USB 関数クライアント ドライバー

UFX は、異なるコントローラー間で一貫して動作する抽象化されたインターフェイスを提供します。 ただし、コントローラーにはさまざまな機能があり、エンドポイントの数、エンドポイントの種類、低電力、リモート ウェイクアップなどの制限があります。 たとえば、特定のコントローラーは DMA をサポートし、他のコントローラーではサポートされていません。 一部のコントローラーはハードウェアにストリームを実装し、他のコントローラーはドライバーがストリームを処理すると予想します。 このような理由から、UFX では一般的な機能だけが処理されます。 転送、電源管理、ストリームのサポート、コントローラーによって異なるその他の機能は、クライアント ドライバーによって処理されます。

USB 関数クライアント ドライバーは、コントローラー固有の操作の実装を担当します。 これには、エンドポイント データ転送の実装、USB デバイスの状態の変更 (リセット、中断、再開)、アタッチ/デタッチ検出、ポート/検出が含まれます。 クライアント ドライバーは、電源管理と PnP イベントの処理も担当します。

関数クライアント ドライバーは、USB関数カーネルモード ドライバー フレームワークを使用して UFX プログラミング インターフェイス に変換(KMDF) ドライバーとして書き込まれます

Microsoft では、ChipIdea および Synopsys コントローラー用のインボックス関数クライアント ドライバー (UfxChipidea.sys、Ufxsynopsys.sys) を提供しています。

USB 下位フィルター ドライバー

USB 下位フィルター ドライバーは、関数コントローラーがインボックス Synopsys ドライバーと ChipIdea ドライバーを使用している場合に、形成器の検出をサポートします。 フィルター ドライバーは、USB ポート検出から始まる USB 充電を管理します。 は、サポートする各施設の種類の GUID と、その施設のプロパティの一覧を公開する必要があります。 特定のオプションが構成可能な場合、下部の USB フィルター ドライバーでは、サポートされている PropertyID の一覧と、それに送信できる対応する値の種類の一覧を定義して、アダプターを構成します。 ドライバーは、バッテリ スタックが充電を開始し、デバイスが描画できる現在の最大量も通知します。 Synopsys ドライバーと ChipIdea ドライバー以外のクライアント ドライバーの場合は、クライアント ドライバーに課金ロジックを実装できます。

関数クラス ドライバーは、独自のメソッド をサポートするためのプログラミング インターフェイスを使用して、UFX に要求を送信します

ユニバーサル シリアル バス (USB)