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 (狀態) 等於 TRUE,並在呼叫 IoCompleteRequest) 之後傳回相同的值 (,如果回呼函式成功完成接收的 IRP。
- 將 IRP 的 IoStatus.Status 成員設定為狀態值, NT_SUCCESS (狀態) 等於 FALSE,並在呼叫 IoCompleteRequest) 之後傳回相同的 (值) 。
- 如果回呼函式呼叫 IoMarkIrpPending,則傳回STATUS_PENDING。
- 如果回呼函式呼叫該方法,則傳回 WdfDeviceWdmDispatchPreprocessedIrp 方法傳回的值。
備註
若要註冊 EvtDeviceWdmIrpPreprocess 回呼函式,您的驅動程式必須呼叫 WdfDeviceInitAssignWdmIrpPreprocessCallback。
您的驅動程式可以使用 EvtDeviceWdmIrpPreprocess 回呼函式來執行下列任何或全部動作:
- 遵循 WDM 規則來處理 IRP,以處理架構不支援的 IRP。
- 在架構處理 IRP 之前先處理 IRP。
- 設定完成例程,讓驅動程式可以在架構處理 IRP 之後進行後續處理。
如果您想要架構後續處理 IRP,就像未呼叫 EvtDeviceWdmIrpPreprocess 回呼函式一樣,回呼函式必須呼叫 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 。
規格需求
需求 | 值 |
---|---|
目標平台 | Universal |
最小 KMDF 版本 | 1.0 |
標頭 | wdfdevice.h (包含 Wdf.h) |
IRQL | <=DISPATCH_LEVEL |