Freigeben über


EVT_WDF_IO_IN_CALLER_CONTEXT Rückruffunktion (wdfdevice.h)

[Gilt nur für KMDF]

Die EvtIoInCallerContext eines Treibers Ereignisrückruffunktion verarbeitet eine E/A-Anforderung vor, bevor das Framework sie in eine E/A-Warteschlange eingibt.

Syntax

EVT_WDF_IO_IN_CALLER_CONTEXT EvtWdfIoInCallerContext;

void EvtWdfIoInCallerContext(
  [in] WDFDEVICE Device,
  [in] WDFREQUEST Request
)
{...}

Parameter

[in] Device

Ein Handle zu einem Framework-Geräteobjekt.

[in] Request

Ein Handle zu einem Framework-Anforderungsobjekt.

Rückgabewert

Nichts

Bemerkungen

Das Framework ruft die EvtIoInCallerContext Rückruffunktion eines Treibers auf, sodass der Treiber jede E/A-Anforderung untersuchen und möglicherweise eine vorläufige Verarbeitung für die Anforderung durchführen kann, bevor das Framework sie in einer E/A-Warteschlange platziert. Um eine EvtIoInCallerContext Rückruffunktion für ein Gerät zu registrieren, ruft der Treiber WdfDeviceInitSetIoInCallerContextCallbackauf.

Wenn ein Treiber eine EvtIoInCallerContext Rückruffunktion für ein Gerät registriert, ruft das Framework die Rückruffunktion jedes Mal auf, wenn es eine E/A-Anforderung für das Gerät empfängt. Die Rückruffunktion wird im Threadkontext des Prozesses aufgerufen, der die E/A-Anforderung an den Treiber gesendet hat. Bei diesem Vorgang handelt es sich entweder um den Treiber der nächsten ebene oder, wenn sich der Treiber oben im Treiberstapel befindet, eine Benutzermodusanwendung.

Der Hauptzweck dieser Rückruffunktion besteht darin, frameworkbasierte Treiber zu ermöglichen, die Pufferzugriffsmethode zu unterstützen, die weder gepuffert noch direkte E/A-aufgerufen wird. Für diese Pufferzugriffsmethode muss der Treiber auf empfangene Puffer im Prozesskontext des Absenders zugreifen.

Nachdem die Rückruffunktion die Puffer einer Anforderung abgerufen hat, kann sie Pufferadressen oder Handles im Kontextspeicher des Anforderungsobjekts speichern. (Der Treiber legt die Größe des Kontextspeicherbereichs des Anforderungsobjekts fest, indem WdfDeviceInitSetRequestAttributesaufgerufen wird.)

Da die Anforderung noch nicht zu einer E/A-Warteschlange gehört, sperrt oder synchronisiert das Framework die Anforderung nicht. Der Treiber ist für jede Synchronisierung verantwortlich, die ggf. erforderlich ist. Weitere Informationen zur Synchronisierung finden Sie unter Synchronisierungstechniken für Framework-Based Drivers.

Nachdem die Rückruffunktion die Vorverarbeitung der Anforderung abgeschlossen hat, muss sie entweder durch Aufrufen von WdfDeviceEnqueueRequest- in die Warteschlange gestellt oder durch Aufrufen WdfRequestComplete (wenn ein Fehler erkannt wird) in die Warteschlange gestellt werden.

Weitere Informationen zur EvtIoInCallerContext Rückruffunktion finden Sie unter Abfangen einer E/A-Anforderung, bevor sie in die Warteschlange gestellt und Zugreifen auf Datenpuffer in Framework-Based Drivers.

Wenn ein Treiber eine E/A-Warteschlange konfiguriert hat, um garantierten Vorwärtsfortschrittzu unterstützen, ruft das Framework möglicherweise nicht die EvtIoInCallerContext Rückruffunktion in Situationen mit geringem Arbeitsspeicher auf. Wenn alle reservierten Anforderungsobjekte des Frameworks verwendet werden, verschiebt das Framework die Verarbeitung der E/A-Anforderung, bis ein reserviertes Anforderungsobjekt verfügbar ist. In diesem Fall kann das Framework die EvtIoInCallerContext Rückruffunktion für die verschobene E/A-Anforderung nicht aufrufen, da das Framework, wenn ein reserviertes Anforderungsobjekt verfügbar wird, nicht mehr im Threadkontext des Prozesses ausgeführt wird, der die E/A-Anforderung an den Treiber gesendet hat.

Die EvtIoInCallerContext Rückruffunktion wird an der IRQL des aufrufenden Threads aufgerufen. Wenn der aufrufende Thread von einer Benutzermodusanwendung stammt, wird die Rückruffunktion bei IRQL = PASSIVE_LEVEL aufgerufen. Wenn der aufrufende Thread von einem Kernelmodustreiber auf höherer Ebene stammt, kann die EvtIoInCallerContext- Rückruffunktion des Treibers bei IRQL <= DISPATCH_LEVEL aufgerufen werden, wenn sowohl die Rückruffunktion als auch der Treiber höherer Ebene für die Übergabe der Anforderung an IRQL-<= DISPATCH_LEVEL konzipiert sind.

Anforderungen

Anforderung Wert
Zielplattform- Universal
Minimale KMDF-Version 1.0
Header- wdfdevice.h (einschließen Wdf.h)
IRQL- Siehe Abschnitt "Hinweise".

Siehe auch

EvtDeviceWdmIrpPreprocess