次の方法で共有


IOCTL_SEND_USB_REQUEST IOCTL (usbscan.h)

コントロール パイプを使用して、ベンダー定義の要求を USB デバイスに送信し、必要に応じて追加のデータを送受信します。

メジャー コード

IRP_MJ_DEVICE_CONTROL

[入力バッファー]

IO_BLOCK_EX構造体へのポインター。

入力バッファーの長さ

入力バッファーのサイズ。

出力バッファー

識別されたIO_BLOCK_EX構造体の pbyData メンバーと同じバッファーへのポインター。データ転送が要求されていない場合は NULL

出力バッファーの長さ

出力バッファーのサイズ。データ転送が要求されていない場合は 0。

ステータス ブロック

Irp->要求が成功した場合、IoStatus.Status はSTATUS_SUCCESSに設定されます。 それ以外の場合は、NTSTATUS コードとして適切なエラー条件の状態

注釈

DeviceIoControl パラメーター

IOCTL_SEND_USB_REQUEST制御コードを使用して DeviceloControl 関数を呼び出す場合、呼び出し元は関数の lpInBuffer パラメーターとしてIO_BLOCK_EX構造体のアドレスを指定する必要があります。 この I/O 制御コードで指定された要求の種類は、送受信される可能性のある情報の種類とサイズと同様に、デバイス固有およびベンダー定義です。

次の表は、入力引数を指定する方法を示しています。

引数 読み取り操作。 書き込み操作。 データ転送なし
lpInBuffer ポインター IO_BLOCK_EXします。 ポインター IO_BLOCK_EXします。 ポインター IO_BLOCK_EXします。
lpOutBuffer 読み取るデータを受け取るバッファーへのポインター。 書き込まれるデータを含むバッファーへのポインター。 NULL
lpOutBufferSize バッファーのサイズ。 バッファーのサイズ。 ゼロ
IO_BLOCK_EX 構造体の bRequest メンバー デバイス固有の要求コード。 デバイス固有の要求コード。 デバイス固有の要求コード。
IO_BLOCK_EX 構造体の pbyData メンバー lpOutBuffer と同じポインター。 lpOutBuffer と同じポインター。 NULL
IO_BLOCK_EX 構造体の uLength メンバー lpOutBufferSize と同じ値。 lpOutBufferSize と同じ値。 ゼロ
構造体の fTransferDirectionIn メンバー IO_BLOCK_EX TRUE FALSE FALSE

IO_BLOCK_EX構造体の bmRequestType メンバーは、IOCTL_SEND_USB_REQUESTでは使用されません。

カーネル モード ドライバーは、IO_BLOCK_EX構造体の内容を使用して、URB_CONTROL_VENDOR_OR_CLASS_REQUEST構造体を含む URB を作成します。

次の表は、構造体メンバーに割り当てられた値_URB_CONTROL_VENDOR_OR_CLASS_REQUEST示しています。

構造体メンバー 割り当てられた値
TransferFlags 0
TransferBufferLength pIoBlockEx-uLength>
TransferBuffer lpOutBuffer (読み取り) または pIoBlockEx-pbyData> (書き込み)
TransferBufferMDL NULL
RequestTypeReservedBits 0xC0 (読み取り) または0x40 (書き込み)
Request pIoBlockEx-bRequest>
Value (SHORT)pIoBlockEx-uOffset>
Index pIoBlockEx-uIndex>

詳細については、「 静止画像デバイスの Kernel-Mode ドライバーへのアクセス」を参照してください。

要件

要件
Header usbscan.h (Usbscan.h を含む)