IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE I/O 要求は、USB 多機能デバイス (複合ドライバー) のドライバーを基になる USB ドライバー スタックに登録します。
この要求は、Microsoft が提供する複合ドライバー (Usbccgp.sys) を置き換え、ユニバーサル シリアル バス (USB) 3.0 仕様に従って関数の中断機能とリモート ウェイクアップ機能を実装するドライバーによって送信されます。
IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE は、カーネル モードの I/O 制御要求です。 この要求は、USB ハブ物理デバイス オブジェクト (PDO) を対象としています。 この要求は、PASSIVE_LEVELの割り込み要求レベル (IRQL) で送信する必要があります。
メジャー コード
IRP_MJ_INTERNAL_DEVICE_CONTROL
入力バッファー
Parameters.Others.Argument1 は、親ドライバーに関する情報を含む呼び出し元によって割り当てられ、初期化された REGISTER_COMPOSITE_DEVICE 構造体へのポインターです。 構造体を初期化するには、USBD_BuildRegisterCompositeDevice ルーチンを呼び出します。
AssociatedIrp.SystemBuffer メンバーは、USB 複合デバイス内の関数の関数ハンドル (型指定されたUSBD_FUNCTION_HANDLE) の配列を保持するのに十分な大きさの呼び出し元割り当てバッファーを指します。 配列内の要素の数は、REGISTER_COMPOSITE_DEVICEの FunctionCount メンバーによって示されます。 関数の数を取得するには、get-configuration 要求によって返される記述子を調べます。
入力バッファーの長さ
REGISTER_COMPOSITE_DEVICE 構造体のサイズ。
出力バッファー
出力時に、AssociatedIrp.SystemBuffer メンバーが指すバッファーには、多機能デバイス内の関数の関数ハンドルが格納されます。
出力バッファーの長さ
デバイス内の関数の関数ハンドルのサイズ。
状態ブロック
USB ドライバー スタックは、要求 正常に完了した場合に、Irp->IoStatus.Status をSTATUS_SUCCESSに設定します。 STATUS_SUCCESSは、関数ハンドルが有効であることを示します。
エラーが発生した場合、Irp->IoStatus.Status には適切なエラー状態が含まれます。 たとえば、複合ドライバーが要求を複数回送信した場合、状態 はSTATUS_INVALID_DEVICE_REQUESTに設定されます。
備考
IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE の目的は、複合ドライバーが USB ドライバー スタックに登録要求を送信することです。 登録要求では、複合ドライバーは、デバイスでサポートされている関数の数を指定します。 したがって、関数の数を決定した後、IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE 要求を送信する必要があります。 通常、その情報は、複合ドライバーのスタート デバイス ルーチン IRP_MN_START_DEVICEで取得されます。 構成 内のインターフェイスの数は、関数の数 示すことができますが、常にとは限りません。 一部の多機能デバイスは、1 つの関数に関連する複数のインターフェイスを公開します。 関数の数を取得するには、特定の構成に関連するさまざまな記述子を検査する必要があります。 これらの記述子は、get-descriptor 要求を通じて取得できます。
登録要求に応答して、USB ドライバー スタックは、デバイス内の関数のハンドルの一覧を提供します。 コード例については、「複合デバイスを登録する方法」を参照してください。
複合ドライバーが登録されると、ドライバーはリモート ウェイクアップ機能を構成できます。 複合ドライバーは、関数ハンドルを使用して、USB ドライバー スタックからリモート ウェイクアップ通知を取得する要求 IOCTL_INTERNAL_USB_REQUEST_REMOTE_WAKE_NOTIFICATION を送信できます。関連付けられている関数が再開信号を送信するときです。
USB ドライバー スタックとの複合ドライバーの関連付けを削除し、登録のために割り当てられているすべてのリソースを解放するには、ドライバーは IOCTL_INTERNAL_USB_UNREGISTER_COMPOSITE_DEVICE 要求を送信する必要があります。
必要条件
| 要件 | 価値 |
|---|---|
| サポートされる最小クライアント | Windows 8 |
| ヘッダー | usbioctl.h (Usbioctl.h を含む) |
| IRQL | PASSIVE_LEVEL |
関連項目
複合デバイス を登録する方法