共用方式為


IOCTL_SEND_USB_REQUEST IOCTL (usbscan.h)

使用控制管道將廠商定義的要求傳送至USB裝置,並選擇性地傳送或接收其他數據。

主要程序代碼

IRP_MJ_DEVICE_CONTROL

輸入緩衝區

IO_BLOCK_EX 結構的指標。

輸入緩衝區長度

輸入緩衝區的大小。

輸出緩衝區

所識別IO_BLOCK_EX結構 pbyData 成員的相同緩衝區指標,如果未要求數據傳輸,則 NULL

輸出緩衝區長度

輸出緩衝區的大小,如果未要求數據傳輸,則為零。

狀態區塊

如果要求成功,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 緩衝區的大小。 緩衝區的大小。
bRequest IO_BLOCK_EX 結構的成員 裝置特定的要求碼。 裝置特定的要求碼。 裝置特定的要求碼。
pbyData IO_BLOCK_EX 結構的成員 lpOutBuffer相同的指標。 lpOutBuffer相同的指標。 NULL
uLength IO_BLOCK_EX 結構的成員 lpOutBufferSize相同的值。 lpOutBufferSize相同的值。
fTransferDirectionIn IO_BLOCK_EX 結構的成員 TRUE FALSE FALSE

bmRequestType IO_BLOCK_EX 結構的成員不會與 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 (read) 或 pIoBlockEx->pbyData (write)
TransferBufferMDL NULL
RequestTypeReservedBits 0xC0(讀取)或0x40(寫入)
要求 pIoBlockEx->bRequest
SHORTpIoBlockEx->uOffset
索引 pIoBlockEx->uIndex

如需詳細資訊,請參閱 存取仍然映像裝置 Kernel-Mode 驅動程式

要求

要求 價值
標頭 usbscan.h (包括 Usbscan.h)