Freigeben über


EVT_WDFDEVICE_WDM_IRP_PREPROCESS Rückruffunktion (wdfdevice.h)

[Gilt nur für KMDF]

Die Ereignisrückruffunktion EvtDeviceWdmIrpPreprocess eines Treibers empfängt einen IRP, bevor das Framework den IRP verarbeitet.

Syntax

EVT_WDFDEVICE_WDM_IRP_PREPROCESS EvtWdfdeviceWdmIrpPreprocess;

NTSTATUS EvtWdfdeviceWdmIrpPreprocess(
  [in]      WDFDEVICE Device,
  [in, out] PIRP Irp
)
{...}

Parameter

[in] Device

Ein Handle für ein Framework-Geräteobjekt.

[in, out] Irp

Ein Zeiger auf eine IRP-Struktur .

Rückgabewert

Die Rückruffunktion EvtDeviceWdmIrpPreprocess muss:

  • Legen Sie den IoStatus.Status-Member des IRP auf STATUS_SUCCESS oder einen anderen status Wert fest, für den NT_SUCCESS(status) gleich TRUE ist, und geben Sie denselben Wert zurück (nach dem Aufruf von IoCompleteRequest), wenn die Rückruffunktion den empfangenen IRP erfolgreich abschließt.
  • Legen Sie den IoStatus.Status-Member des IRP auf einen status Wert fest, für den NT_SUCCESS(status) gleich FALSE ist, und geben Sie denselben Wert zurück (nach dem Aufruf von IoCompleteRequest), wenn die Rückruffunktion einen Fehler erkennt.
  • Gibt STATUS_PENDING zurück, wenn die Rückruffunktion IoMarkIrpPending aufruft.
  • Gibt den Wert zurück, den die WdfDeviceWdmDispatchPreprocessedIrp-Methode zurückgibt, wenn die Rückruffunktion diese Methode aufruft.

Hinweise

Um eine EvtDeviceWdmIrpPreprocess-Rückruffunktion zu registrieren, muss Ihr Treiber WdfDeviceInitAssignWdmIrpPreprocessCallback aufrufen.

Ihr Treiber kann eine EvtDeviceWdmIrpPreprocess-Rückruffunktion verwenden, um eine beliebige oder alle der folgenden Aktionen auszuführen:

  • Behandeln Sie ein IRP, das vom Framework nicht unterstützt wird, indem Sie die WDM-Regeln für die Behandlung von IRPs beachten.
  • Verarbeiten Sie eine IRP vor, bevor sie vom Framework verarbeitet wird.
  • Legen Sie eine Vervollständigungsroutine fest, damit der Treiber eine IRP nach der Verarbeitung durch das Framework verarbeiten kann.
Weitere Informationen zum Implementieren einer EvtDeviceWdmIrpPreprocess-Rückruffunktion finden Sie unter Behandeln von WDM-IRPs außerhalb des Frameworks.

Wenn das Framework den IRP anschließend so behandeln soll, wie es wäre, wenn die Rückruffunktion EvtDeviceWdmIrpPreprocess nicht aufgerufen worden wäre, muss die Rückruffunktion WdfDeviceWdmDispatchPreprocessedIrp aufrufen, um den IRP an das Framework zurückzugeben.

Wenn Ihr Treiber eine EvtDeviceWdmIrpPreprocess-Rückruffunktion registriert, fügt das Framework IRPs, die die Rückruffunktion empfängt, einen zusätzlichen E/A-Stapelspeicherort hinzu. Der zusätzliche E/A-Stapelspeicherort ermöglicht es der Rückruffunktion, eine IoCompletion-Routine festzulegen, bevor WdfDeviceWdmDispatchPreprocessedIrp aufgerufen wird.

Die Rückruffunktion EvtDeviceWdmIrpPreprocess wird am IRQL des aufrufenden Threads aufgerufen. Die IRQL wird durch den Typ des IRP bestimmt, den das Framework an EvtDeviceWdmIrpPreprocess übergibt. Wenn der PnP-Manager beispielsweise IRP_MN_QUERY_DEVICE_RELATIONS unter IRQL = PASSIVE_LEVEL sendet, ruft das Framework EvtDeviceWdmIrpPreprocess unter IRQL = PASSIVE_LEVEL auf.

Anforderungen

Anforderung Wert
Zielplattform Universell
KMDF-Mindestversion 1.0
Kopfzeile wdfdevice.h (einschließen von Wdf.h)
IRQL <=DISPATCH_LEVEL

Weitere Informationen

WdfDeviceInitAssignWdmIrpPreprocessCallback

WdfDeviceWdmDispatchPreprocessedIrp