次の方法で共有


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 関数を呼び出す場合、呼び出し元は、IO_BLOCK_EX 構造体のアドレスを関数の lpInBuffer パラメーターとして指定する必要があります。 この 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構造体メンバーに割り当てられた値を示しています。

Structure メンバー 割り当てられた値
TransferFlags 0
TransferBufferLength pIoBlockEx->uLength
TransferBuffer lpOutBuffer (読み取り) または pIoBlockEx->pbyData (書き込み)
TransferBufferMDL NULL
RequestTypeReservedBits 0xC0 (読み取り) または0x40 (書き込み)
要求 pIoBlockEx- bRequestの>
値の (SHORT)pIoBlockEx->uOffset
インデックス pIoBlockEx- uIndex>

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

必要条件

要件 価値
ヘッダー usbscan.h (Usbscan.h を含む)