共用方式為


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

另請參閱

WdfDeviceInitAssignWdmIrpPreprocessCallback

WdfDeviceWdmDispatchPreprocessedIrp