EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL回呼函式 (wdfio.h)
[適用于 KMDF 和 UMDF]
驅動程式的 EvtIoDeviceControl 事件回呼函式會處理指定的裝置 I/O 控制要求。
語法
EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL EvtWdfIoQueueIoDeviceControl;
void EvtWdfIoQueueIoDeviceControl(
[in] WDFQUEUE Queue,
[in] WDFREQUEST Request,
[in] size_t OutputBufferLength,
[in] size_t InputBufferLength,
[in] ULONG IoControlCode
)
{...}
參數
[in] Queue
與 I/O 要求相關聯的架構佇列物件的控制碼。
[in] Request
架構要求物件的控制碼。
[in] OutputBufferLength
如果可用的輸出緩衝區,則為要求的輸出緩衝區長度,以位元組為單位。
[in] InputBufferLength
如果輸入緩衝區可用,則為要求的輸入緩衝區長度,以位元組為單位。
[in] IoControlCode
與要求相關聯的驅動程式定義或系統定義的 I/O 控制項程式碼 (IOCTL) 。
傳回值
無
備註
當驅動程式呼叫WdfIoQueueCreate時,驅動程式會註冊EvtIoDeviceControl回呼函式。 如需呼叫 WdfIoQueueCreate的詳細資訊,請參閱 建立 I/O 佇列。
如果驅動程式已註冊裝置 I/O 佇列的 EvtIoDeviceControl 回呼函式,回呼函式會從佇列接收每個 I/O 控制要求 (IRP_MJ_DEVICE_CONTROL) 。 如需詳細資訊,請參閱 要求處理常式。
EvtIoDeviceControl回呼函式必須以某種方式處理每個收到的 I/O 要求。 如需詳細資訊,請參閱 處理 I/O 要求。
當使用者應用程式呼叫DeviceIoControl (時,驅動程式會收到 I/O 控制要求,Microsoft Windows SDK檔) 或另一個驅動程式藉由呼叫WdfIoTargetSendIoctlSynchronously或WdfIoTargetFormatRequestForIoctl來建立要求。
要執行的作業類型取決於 IoControlCode 參數的值。 您必須判斷應用程式和其他驅動程式可以傳送給驅動程式的 IoControlCode 值集。 如需 IOCTL 的詳細資訊,請參閱 使用 I/O 控制項代碼。
大部分的裝置 I/O 控制作業都需要輸入緩衝區、輸出緩衝區或兩者。 如需驅動程式如何存取要求緩衝區的資訊,請參閱 存取Framework-Based驅動程式中的資料緩衝區。
驅動程式可用來存取要求輸入和輸出緩衝區的技術,如果它們存在) 則 (視 IOCTL 的 TransferType 欄位而定。 IOCTL 的 TransferType 欄位的值可以是METHOD_BUFFERED、METHOD_DIRECT_IN、METHOD_DIRECT_OUT或METHOD_NEITHER。 如需 TransferType 欄位的詳細資訊,請參閱 定義 I/O 控制項代碼。
除非裝置或驅動程式WDF_OBJECT_ATTRIBUTES結構的ExecutionLevel成員設定為WdfExecutionLevelPassive,否則可以在 IRQL < = DISPATCH_LEVEL呼叫EvtIoDeviceControl回呼函式。
如果 IRQL PASSIVE_LEVEL,架構會呼叫 重要區域內的回呼函式。
如需要求處理常式 IRQL 層級的詳細資訊,請參閱 使用自動同步處理。
驅動程式的 EvtIoDeviceControl 回呼函式不應該呼叫下列佇列物件方法:
規格需求
目標平臺 | 環球 |
最小 KMDF 版本 | 1.0 |
最低 UMDF 版本 | 2.0 |
標頭 | wdfio.h (包含 Wdf.h) |
IRQL | <= DISPATCH_LEVEL (請參閱一節) |