IOCTL_SEND_USB_REQUEST IOCTL (usbscan.h)
使用控制管道將廠商定義的要求傳送至USB裝置,並選擇性地傳送或接收其他數據。
主要程序代碼
輸入緩衝區
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) |