共用方式為


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 緩衝區的大小。 緩衝區的大小。 零個
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 (写入)
要求 pIoBlockEx-bRequest>
(SHORT) pIoBlockEx-uOffset>
Index pIoBlockEx-uIndex>

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

規格需求

需求
標頭 usbscan.h (包含 Usbscan.h)