EVT_WDF_REQUEST_COMPLETION_ROUTINE回呼函式 (wdfrequest.h)
[適用於 KMDF 和 UMDF]
當另一個驅動程式完成指定的 I/O 要求時,驅動程式的 CompletionRoutine 事件回呼函式就會執行。
語法
EVT_WDF_REQUEST_COMPLETION_ROUTINE EvtWdfRequestCompletionRoutine;
void EvtWdfRequestCompletionRoutine(
[in] WDFREQUEST Request,
[in] WDFIOTARGET Target,
[in] PWDF_REQUEST_COMPLETION_PARAMS Params,
[in] WDFCONTEXT Context
)
{...}
參數
[in] Request
架構要求物件的句柄,表示已完成的 I/O 要求。
[in] Target
I/O 目標物件的句柄,表示已完成要求的 I/O 目標。
[in] Params
包含已完成要求相關信息之 WDF_REQUEST_COMPLETION_PARAMS 結構的指標。 請參閱下方的附註,以瞭解完成參數的有效性。
[in] Context
驅動程式提供的內容資訊,這是先前呼叫 WdfRequestSetCompletionRoutine 中所指定的驅動程式。
傳回值
沒有
言論
若要註冊 I/O 要求的 CompletionRoutine 回呼函式,驅動程式必須呼叫 WdfRequestSetCompletionRoutine。 如需此回呼函式的詳細資訊,請參閱 完成 I/O 要求。
只有在驅動程式藉由呼叫下列其中一項來格式化要求時,完成參數結構才會完整填入有效的資訊:
- WdfIoTargetFormatXxx 方法,例如 WdfIoTargetFormatRequestForRead
- WdfUsbTargetDeviceFormatRequestForXxx 方法,例如 WdfUsbTargetDeviceFormatRequestForString
- WdfUsbTargetPipeFormatRequestForXxx 方法,例如 WdfUsbTargetPipeFormatRequestForWrite
如果驅動程式使用 WdfRequestFormatRequestUsingCurrentType 或 WdfRequestWdmFormatUsingStackLocation格式化要求,則完成參數結構中只有 IoStatus 字段有效。
KMDF 驅動程式的 CompletionRoutine 可以在 IRQL <= DISPATCH_LEVEL 執行,而不論 I/O 要求物件在 WDF_OBJECT_ATTRIBUTES 結構中指定的 ExecutionLevel 為何。
例子
函式類型會在 Wdfrequest.h中宣告,如下所示。
typedef VOID
(EVT_WDF_REQUEST_COMPLETION_ROUTINE)(
IN WDFREQUEST Request,
IN WDFIOTARGET Target,
IN PWDF_REQUEST_COMPLETION_PARAMS Params,
IN WDFCONTEXT Context
);
若要定義名為 MyCompletionRoutine的 CompletionRoutine 回呼函式,您必須先提供 SDV 和其他驗證工具所需的函式宣告,如下所示:
EVT_WDF_REQUEST_COMPLETION_ROUTINE MyCompletionRoutine;
然後,實作回呼函式,如下所示:
VOID
MyCompletionRoutine (
IN WDFREQUEST Request,
IN WDFIOTARGET Target,
IN PWDF_REQUEST_COMPLETION_PARAMS Params,
IN WDFCONTEXT Context
)
{...}
要求
要求 | 價值 |
---|---|
目標平臺 | 普遍 |
最低 KMDF 版本 | 1.0 |
最低 UMDF 版本 | 2.0 |
標頭 | wdfrequest.h (包括 Wdf.h) |
IRQL | <=DISPATCH_LEVEL |