Freigeben über


Anforderungshandler

Wenn Ihr Treiber entweder die sequenzielle oder die parallele Verteilermethode für eine E/A-Warteschlange angegeben hat, ruft das Framework jedes Mal eine vom Treiber bereitgestellte Rückruffunktion auf, wenn sie bereit ist, eine der Anforderungen der Warteschlange an den Treiber zu übermitteln.

Für jede E/A-Warteschlange kann der Treiber eine oder mehrere der folgenden Rückruffunktionen bereitstellen, die als Anforderungshandler bezeichnet werden:

EvtIoRead
Das Framework ruft die Rückruffunktion EvtIoRead einer E/A-Warteschlange auf, wenn eine Leseanforderung in der Warteschlange verfügbar ist.

EvtIoWrite
Das Framework ruft die EvtIoWrite-Rückruffunktion einer E/A-Warteschlange auf, wenn eine Schreibanforderung in der Warteschlange verfügbar ist.

EvtIoDeviceControl
Das Framework ruft die EvtIoDeviceControl-Rückruffunktion einer E/A-Warteschlange auf, wenn eine Geräte-E/A-Steuerungsanforderung in der Warteschlange verfügbar ist.

EvtIoInternalDeviceControl
Das Framework ruft die EvtIoInternalDeviceControl-Rückruffunktion einer E/A-Warteschlange auf, wenn eine interne Geräte-E/A-Steueranfrage in der Warteschlange eingegangen ist.

EvtIoDefault
Das Framework ruft die EvtIoDefault-Rückruffunktion einer E/A-Warteschlange auf, wenn eine Anforderung verfügbar ist, wenn der Treiber die zugehörige anforderungsspezifische Rückruffunktion nicht angegeben hat.

Der Treiber registriert Rückruffunktionen, wenn er WdfIoQueueCreate aufruft , um eine E/A-Warteschlange für ein Gerät zu erstellen.

Jede dieser Rückruffunktionen empfängt zwei Eingabeargumente: ein Handle für die E/A-Anforderung, die das Framework an den Treiber liefert, und ein Handle für die E/A-Warteschlange, die die Anforderung enthält. Eine Rückruffunktion kann das Zielgerät ermitteln, indem WdfIoQueueGetDevice aufgerufen wird.

Das Framework ruft die Anforderungs-Handler des Treibers in einem beliebigen Threadkontext auf. Während der Ausführung in einem beliebigen Thread-Kontext sollte ein Treiber nicht über einen längeren Zeitraum warten. In einigen Fällen verwendet Ihr Treiber möglicherweise Kernel dispatcher-Objekte als Synchronisierungsmechanismen. Informationen dazu, wann Ihr Treiber auf Verteilerobjekte warten kann und was zu tun ist, wenn dies nicht möglich ist, finden Sie unter Einführung in Kernel Dispatcher-Objekte.