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