Anforderungshandler
Wenn Ihr Treiber entweder die sequenzielle oder die parallele Dispatchmethode für eine E/A-Warteschlange angegeben hat, ruft das Framework jedes Mal eine vom Treiber bereitgestellte Rückruffunktion auf, wenn es 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 EvtIoRead-Rückruffunktion 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 in der Warteschlange eine Geräte-E/A-Steuerungsanforderung verfügbar ist.
EvtIoInternalDeviceControl
Das Framework ruft die EvtIoInternalDeviceControl-Rückruffunktion einer E/A-Warteschlange auf, wenn in der Warteschlange eine interne Geräte-E/A-Steuerungsanforderung verfügbar ist.
EvtIoDefault
Das Framework ruft die EvtIoDefault-Rückruffunktion einer E/A-Warteschlange auf, wenn eine Anforderung verfügbar ist, wenn der Treiber die zugeordnete Anforderungstyp-spezifische Rückruffunktion nicht bereitgestellt 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 enthalten hat. Eine Rückruffunktion kann das Zielgerät ermitteln, indem WdfIoQueueGetDevice aufgerufen wird.
Das Framework ruft die Anforderungshandler Ihres Treibers in einem beliebigen Threadkontext auf. Ein Treiber sollte nicht länger warten, während er in einem beliebigen Threadkontext ausgeführt wird. In einigen Fällen verwendet Ihr Treiber möglicherweise Kernelverteilerobjekte 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.