IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME I/O 要求は、USB ホスト コントローラーのデバイス名をバス ドライバーに照会します。
IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME は、カーネル モードの I/O 制御要求です。 この要求は、USB ハブ PDO を対象とします。 この要求は、PASSIVE_LEVELの IRQL で送信する必要があります。
メジャー コード
IRP_MJ_INTERNAL_DEVICE_CONTROL
入力バッファー
Parameters.Others.Argument1 は、ホスト コントローラーの名前で入力される USB_HUB_NAME 構造体へのポインターである必要があります。
入力バッファーの長さ
Parameters.Others.Argument2 は、Parameters.Others.Argument1のバッファーの長さをバイト単位で指定する ULONG である必要があります。
出力バッファー
バス ドライバーは、Parameters.Others.Argument1 が指すバッファーにホスト コントローラーのデバイス名を入力します。
出力バッファーの長さ
これは、Parameters.Others.Argument2で指定された長さまで入力されます。
状態ブロック
バスまたはポート ドライバー Irp->IoStatus.Status をSTATUS_SUCCESSまたは適切なエラー状態に設定します。
備考
呼び出し元は、USB_HUB_NAME 構造体を保持するのに十分な大きさのバッファーを提供する必要があります。 Parameters.Others.Argument2 値は、そのバッファーのサイズを示します。 正常に完了すると、USB_HUB_NAME の HubName メンバーにはコントローラーの名前が含まれており、ActualLength メンバーはコントローラー名文字列の長さを示します。 ActualLength は、USB_HUB_NAME 構造体全体のサイズを示していません。 Parameters.Others.Argument1 で指定されたバッファーが文字列を保持するのに十分な大きさでない場合、HubName 値に切り捨てられた文字列が表示されることがあります。
文字列を保持するために必要なバッファーのサイズを取得するには、要求を 2 回送信します。 最初の要求で、少なくとも sizeof(USB_HUB_NAME) バイトのバッファーを指定します。 それ以外の場合、ActualLength は文字列の正しい長さを示しません。要求はSTATUS_BUFFER_TOO_SMALLで失敗します。
最初の要求が正常に完了したら、ActualLength + sizeof(ULONG) バイトのバッファーを割り当てて、要求を再度送信します。 要求が完了すると、HubName はコントローラー名の文字列全体を示します。
必要条件
| 要件 | 価値 |
|---|---|
| ヘッダー | usbioctl.h |