Freigeben über


EVT_WDFDEVICE_WDM_IRP_PREPROCESS Rückruffunktion (wdfdevice.h)

[Gilt nur für KMDF]

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

Syntax

EVT_WDFDEVICE_WDM_IRP_PREPROCESS EvtWdfdeviceWdmIrpPreprocess;

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

Parameter

[in] Device

Ein Handle zu einem Framework-Geräteobjekt.

[in, out] Irp

Ein Zeiger auf eine IRP--Struktur.

Rückgabewert

Die EvtDeviceWdmIrpPreprocess Rückruffunktion muss:

  • Legen Sie den IoStatus.Status Member des IRP auf STATUS_SUCCESS oder einen anderen Statuswert fest, für den NT_SUCCESS(Status) TRUE-entspricht, und geben Sie denselben Wert zurück (nach dem Aufrufen von IoCompleteRequest), wenn die Rückruffunktion die empfangene IRP erfolgreich abgeschlossen hat.
  • Legen Sie den IoStatus.Status Member des IRP auf einen Statuswert fest, für den NT_SUCCESS(Status) FALSE-entspricht, und geben Sie denselben Wert (nach dem Aufrufen von IoCompleteRequest) zurück, wenn die Rückruffunktion einen Fehler erkennt.
  • Gibt STATUS_PENDING zurück, wenn die Rückruffunktion IoMarkIrpPendingaufruft.
  • Gibt den Wert zurück, den die WdfDeviceWdmDispatchPreprocessedIrp Methode zurückgibt, wenn die Rückruffunktion diese Methode aufruft.

Bemerkungen

Um eine EvtDeviceWdmIrpPreprocess Rückruffunktion zu registrieren, muss Ihr Treiber WdfDeviceInitAssignWdmIrpPreprocessCallbackaufrufen.

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 IRPsfolgen.
  • Vorverarbeitung eines IRP vor der Verarbeitung des Frameworks.
  • Legen Sie eine Abschlussroutine fest, damit der Treiber ein IRP nach der Verarbeitung des Frameworks verarbeiten kann.
Weitere Informationen zum Implementieren einer EvtDeviceWdmIrpPreprocess Rückruffunktion finden Sie unter Behandeln von WDM IRPs außerhalb des Framework-.

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

Wenn Ihr Treiber eine EvtDeviceWdmIrpPreprocess Rückruffunktion registriert, fügt das Framework einen zusätzlichen I/O-Stapelspeicherort irPs hinzu, die die Rückruffunktion empfängt. Die zusätzliche I/O-Stapelposition ermöglicht es der Rückruffunktion, eine IoCompletion- Routine festzulegen, bevor sie WdfDeviceWdmDispatchPreprocessedIrpaufruft.

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

Anforderungen

Anforderung Wert
Zielplattform- Universal
Minimale KMDF-Version 1.0
Header- wdfdevice.h (einschließen Wdf.h)
IRQL- <=DISPATCH_LEVEL

Siehe auch

WdfDeviceInitAssignWdmIrpPreprocessCallback-

WdfDeviceWdmDispatchPreprocessedIrp