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.
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 |