Udostępnij przez


Programy obsługi żądań

Jeśli sterownik określił sekwencyjną lub równoległą metodę wysyłania dla kolejki we/wy, struktura wywołuje funkcję wywołania zwrotnego dostarczonego przez sterownik za każdym razem, gdy jest gotowy do dostarczenia jednego z żądań kolejki do sterownika.

Dla każdej kolejki I/O sterownik może udostępnić jedną lub więcej z następujących funkcji wywołania zwrotnego, które są nazywane procedurami obsługi żądań:

EvtIoRead
Framework wywołuje funkcję zwrotną EvtIoRead kolejki we/wy, gdy w kolejce dostępne jest żądanie odczytu.

EvtIoWrite
Platforma wywołuje funkcję zwrotną EvtIoWrite dla kolejki we/wy, gdy żądanie zapisu jest dostępne w kolejce.

EvtIoDeviceControl
Platforma wywołuje funkcję callback EvtIoDeviceControl kolejki I/O, gdy żądanie sterowania urządzenia jest dostępne w kolejce.

EvtIoInternalDeviceControl
Struktura wywołuje funkcję zwrotną EvtIoInternalDeviceControl kolejki operacji we/wy, gdy wewnętrzne żądanie sterowania urządzeniem we/wy jest dostępne w kolejce.

EvtIoDefault
Struktura wywołuje funkcję wywołania zwrotnego EvtIoDefault kolejki we/wy, gdy jakiekolwiek żądanie jest dostępne, o ile sterownik nie dostarczył odpowiedniej funkcji wywołania zwrotnego specyficznej dla typu żądania.

Sterownik rejestruje funkcje wywołania zwrotnego, gdy wywołuje funkcję WdfIoQueueCreate w celu utworzenia kolejki I/O dla urządzenia.

Każda z tych funkcji wywołania zwrotnego otrzymuje dwa argumenty wejściowe: dojście do żądania we/wy, które platforma dostarcza do sterownika i dojście do kolejki we/wy, która przechowywała żądanie. Funkcja wywołania zwrotnego może określić urządzenie docelowe przez wywołanie funkcji WdfIoQueueGetDevice.

Framework wywołuje procedury obsługi żądań sterownika w dowolnym kontekście wątku. Sterownik nie powinien długo czekać, działając w dowolnym kontekście wątku. W niektórych przypadkach sterownik może używać obiektów dyspozytora jądra jako mechanizmów synchronizacji. Aby uzyskać informacje o tym, kiedy sterownik może czekać na obiekty dyspozytora i co zrobić, gdy nie może, zobacz Wprowadzenie do obiektów dyspozytora jądra.