共用方式為


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。
如需如何實作 EvtDeviceWdmIrpPreprocess 回呼函式的詳細資訊,請參閱 處理 Framework 外部的 WDM 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

另請參閱

WdfDeviceInitAssignWdmIrpPreprocessCallback

WdfDeviceWdmDispatchPreprocessedIrp