EVT_WDF_REQUEST_COMPLETION_ROUTINE回呼函式 (wdfrequest.h)
[適用於 KMDF 和 UMDF]
驅動程式的 CompletionRoutine 事件回呼函式會在另一個驅動程式完成指定的 I/O 要求時執行。
語法
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
)
{...}
規格需求
需求 | 值 |
---|---|
目標平台 | Universal |
最低 KMDF 版本 | 1.0 |
最低UMDF版本 | 2.0 |
標頭 | wdfrequest.h (包含 Wdf.h) |
IRQL | <=DISPATCH_LEVEL |