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 | 緩衝區的大小。 | 緩衝區的大小。 | 零 |
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 |
值 | (SHORT)pIoBlockEx->uOffset |
索引 | pIoBlockEx->uIndex |
如需詳細資訊,請參閱 存取仍然映像裝置 Kernel-Mode 驅動程式。
要求
要求 | 價值 |
---|---|
標頭 | usbscan.h (包括 Usbscan.h) |