Freigeben über


EVT_WDFDEVICE_WDM_IRP_DISPATCH Rückruffunktion (wdfdevice.h)

[Gilt für KMDF und UMDF]

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

Syntax

EVT_WDFDEVICE_WDM_IRP_DISPATCH EvtWdfdeviceWdmIrpDispatch;

NTSTATUS EvtWdfdeviceWdmIrpDispatch(
  [in]      WDFDEVICE Device,
  [in]      UCHAR MajorFunction,
  [in]      UCHAR MinorFunction,
  [in]      ULONG Code,
  [in]      WDFCONTEXT DriverContext,
  [in, out] PIRP Irp,
  [in]      WDFCONTEXT DispatchContext
)
{...}

Parameter

[in] Device

Ein Handle zu einem Framework-Geräteobjekt.

[in] MajorFunction

Einer der hauptfunktionscodes für IRP, die in wdm.h definiert sind.

[in] MinorFunction

Einer der I/O-Hilfsfunktionscodes, die in wdm.h für den MajorFunction--Code definiert sind.

[in] Code

Gibt einen E/A-Steuerelementcodewert an. Dieser Parameter ist nur gültig, wenn MajorFunction- auf IRP_MJ_DEVICE_CONTROL festgelegt ist.

[in] DriverContext

Ein nicht eingegebener Zeiger auf treiberdefinierte Kontextinformationen, die der Treiber beim Aufruf WdfDeviceConfigureWdmIrpDispatchCallbackbereitgestellt hat.

[in, out] Irp

Ein Zeiger auf eine IRP-Struktur.

[in] DispatchContext

Ein nicht typisiertes Zeiger auf die Verteilerkontextinformationen des Frameworks. Der Treiber muss diesen Parameter angeben, wenn er WdfDeviceWdmDispatchIrpaufruft.

Rückgabewert

Die EvtDeviceWdmIrpDispatch Rückruffunktion muss:

  • Gibt den Wert zurück, den die WdfDeviceWdmDispatchIrp Methode zurückgibt, wenn die Rückruffunktion diese Methode aufruft.
  • Gibt den Wert zurück, den die WdfDeviceWdmDispatchIrpToIoQueue Methode zurückgibt, wenn die Rückruffunktion diese Methode aufruft.
  • nur KMDF

    Legen Sie den IoStatus.Status Member des IRP auf STATUS_SUCCESS oder einen anderen Statuswert fest, für den NT_SUCCESS(Status) gleich TRUE ist, und geben Sie denselben Wert zurück (nach dem Aufrufen IoCompleteRequest), wenn die Rückruffunktion die empfangene IRP erfolgreich abgeschlossen hat.
  • nur KMDF

    Legen Sie den IoStatus.Status Member des IRP auf einen Statuswert fest, für den NT_SUCCESS(Status) GLEICH FALSE ist, und geben Sie denselben Wert (nach dem Aufrufen IoCompleteRequest) zurück, wenn die Rückruffunktion einen Fehler erkennt.
  • nur KMDF

    Gibt STATUS_PENDING zurück, wenn die Rückruffunktion IoMarkIrpPendingaufruft.

Bemerkungen

Die EvtDeviceWdmIrpDispatch Rückruffunktion sollte nur verwendet werden, um eine bestimmte Warteschlange für ein IRP auszuwählen. Dazu ruft der Treiber die WdfDeviceWdmDispatchIrpToIoQueue Methode innerhalb der Rückruffunktion auf.

Wenn der Treiber nach dem Untersuchen eines IRP in dieser Rückruffunktion nicht weiß, wie das IRP verteilt wird, kann der Treiber WdfDeviceWdmDispatchIrp aufrufen, um das IRP für die Standardbehandlung an das Framework zurückzugeben.

Ein UMDF-Treiber muss entweder WdfDeviceWdmDispatchIrp oder WdfDeviceWdmDispatchIrpToIoQueue aus dieser Rückruffunktion aufrufen. Ein KMDF-Treiber verfügt über die zusätzliche Option, weder das IRP aufzurufen noch das Ausstehende zu markieren.

Um eine EvtDeviceWdmIrpDispatch Rückruffunktion zu registrieren, muss Ihr Treiber WdfDeviceConfigureWdmIrpDispatchCallbackaufrufen.

In seiner EvtDeviceWdmIrpDispatch Rückruffunktion sollte ein Treiber keine Abschlussroutine festlegen. Wenn eine Abschlussroutine erforderlich ist, kann ein KMDF-Treiber einen EvtDeviceWdmIrpPreprocess Rückruffunktion anstelle von EvtDeviceWdmIrpDispatchbereitstellen.

Weitere Informationen zum Angeben von Warteschlangen für IRPs beim Eintreffen finden Sie unter Verteilen von IRPs an E/A-Warteschlangen.

Anforderungen

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

Siehe auch

WdfDeviceConfigureWdmIrpDispatchCallback

WdfDeviceWdmDispatchIrp

WdfDeviceWdmDispatchIrpToIoQueue