IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE IOCTL (usbioctl.h)
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 要求を送信する必要があります。 通常、その情報は複合ドライバーの start-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 |
Header | usbioctl.h (Usbioctl.h を含む) |
IRQL | PASSIVE_LEVEL |