EVT_WDFDEVICE_WDM_IRP_PREPROCESS回呼函式 (wdfdevice.h)
[僅適用於 KMDF]
驅動程式的 EvtDeviceWdmIrpPreprocess 事件回呼函式會在架構處理 IRP 之前收到 IRP。
語法
EVT_WDFDEVICE_WDM_IRP_PREPROCESS EvtWdfdeviceWdmIrpPreprocess;
NTSTATUS EvtWdfdeviceWdmIrpPreprocess(
[in] WDFDEVICE Device,
[in, out] PIRP Irp
)
{...}
參數
[in] Device
架構裝置物件的句柄。
[in, out] Irp
IRP 結構的指標。
傳回值
EvtDeviceWdmIrpPreprocess 回呼函式必須:
- 將 IRP IoStatus.Status 成員設定為STATUS_SUCCESS或另一個狀態值,NT_SUCCESS(status) 等於 TRUE,並傳回相同的值(在呼叫 IoCompleteRequest之後),如果回呼函式成功完成接收的 IRP。
- 如果回呼函式偵測到錯誤,請將 IRP IoStatus.Status 成員設定為 NT_SUCCESS(status) 等於 FALSE的狀態值,並傳回相同的值(在呼叫 IoCompleteRequest 之後)。
- 如果回呼函式呼叫ioMarkIrpPending ,則傳回STATUS_PENDING。
- 如果回呼函式呼叫該方法,則傳回 WdfDeviceWdmDispatchPreprocessedIrp 方法傳回的值。
言論
若要註冊 EvtDeviceWdmIrpPreprocess 回呼函式,您的驅動程式必須呼叫 WdfDeviceInitAssignWdmIrpPreprocessCallback。
您的驅動程式可以使用 EvtDeviceWdmIrpPreprocess 回呼函式來執行下列任何或全部作業:
- 遵循處理 IRP 的WDM 規則,以處理架構不支援的 IRP。
- 在架構處理 IRP 之前先處理 IRP。
- 設定完成例程,讓驅動程式可以在架構處理之後處理 IRP。
如果您希望架構後續處理 IRP,就像未呼叫 EvtDeviceWdmIrpPreprocess 回呼函式一樣處理 IRP,回呼函式必須呼叫 WdfDeviceWdmDispatchPreprocessedIrp,才能將 IRP 傳回架構。
如果您的驅動程式註冊 EvtDeviceWdmIrpPreprocess 回呼函式,架構會將額外的 I/O 堆棧位置 新增至回呼函式所接收的 IRP。 額外的 I/O 堆疊位置可讓回調函式在呼叫 WdfDeviceWdmDispatchPreprocessedIrp之前,先設定 IoCompletion 例程。
EvtDeviceWdmIrpPreprocess 回呼函式會在呼叫線程的 IRQL 呼叫。 IRQL 取決於架構傳遞至 EvtDeviceWdmIrpPreprocess的 IRP 類型。 例如,如果 PnP 管理員在 IRQL = PASSIVE_LEVEL 傳送 IRP_MN_QUERY_DEVICE_RELATIONS,則架構會在 IRQL = PASSIVE_LEVEL 呼叫 EvtDeviceWdmIrpPreprocess。
要求
要求 | 價值 |
---|---|
目標平臺 | 普遍 |
最低 KMDF 版本 | 1.0 |
標頭 | wdfdevice.h (包括 Wdf.h) |
IRQL | <=DISPATCH_LEVEL |