Udostępnij przez


Tworzenie kolejek we/wy

Obiekty kolejki strukturalnej reprezentują kolejki we/wy , które są kontenerami dla żądań we/wy odbieranych przez sterownik. Każdy sterownik może utworzyć jedną lub więcej kolejek wejścia/wyjścia dla każdego urządzenia. Obiekt kolejki w strukturze definiuje zestaw funkcji zwrotnych zdarzeń , które sterownik może dostarczyć, oraz zestaw metod obiektów, które sterownik może wywołać.

Gdy platforma odbiera żądanie we/wy kierowane do jednego z urządzeń sterownika, platforma umieszcza żądanie w odpowiedniej kolejce we/wy. Jeśli sterownik rejestruje co najmniej jedną procedurę obsługi żądań , framework może powiadomić sterownik za każdym razem, gdy jest dostępne żądanie we/wy. Alternatywnie sterownik może sprawdzać kolejkę I/O pod kątem żądań.

Większość sterowników tworzy kolejki we/wy w funkcji wywołania zwrotnego EvtDriverDeviceAdd. Aby utworzyć kolejkę we/wy dla urządzenia, sterownik wywołuje metodę WdfIoQueueCreate obiektu kolejki platformy (która tworzy obiekt kolejki platformy). Sterownik dostarcza do metody strukturę WDF_IO_QUEUE_CONFIG. Ta struktura zawiera informacje o konfiguracji kolejki, takie jak metoda dystrybucji i wskaźniki do procedur obsługi żądań, które platforma wywołuje, gdy żądania są dostępne w kolejce. Struktura wskazuje również, czy kolejka będzie zarządzana energią i czy sterownik obsługuje bufory o zerowej długości dla żądań we/wy kolejki.

Jeśli sterownik ustawi element DefaultQueue struktury WDF_IO_QUEUE_CONFIG na TRUE, kolejka stanie się domyślną kolejką I/O urządzenia. Jeśli sterownik utworzy domyślną kolejkę wejścia/wyjścia, system umieszcza wszystkie żądania wejścia/wyjścia urządzenia w tej kolejce, chyba że utworzysz dodatkowe kolejki, aby odbierać niektóre żądania. Sterownik może uzyskać dojście do domyślnej kolejki wejścia/wyjścia urządzenia, wywołując metodę WdfDeviceGetDefaultQueue.

Jeśli chcesz użyć więcej niż jednej kolejki I/O dla urządzenia, sterownik może wywołać WdfIoQueueCreate, aby stworzyć dowolną liczbę obiektów kolejki. Jeśli sterownik tworzy wiele kolejek, może wywołać WdfDeviceConfigureRequestDispatching, co instruuje platformę, by kierowała różne typy żądań do różnych kolejek. Można na przykład określić, że wszystkie żądania odczytu zostaną dostarczone do jednej kolejki, a wszystkie żądania zapisu zostaną dostarczone do innej kolejki.

Jeśli sterownik tworzy zestaw kolejek we/wy i wywołuje WdfDeviceConfigureRequestDispatching, aby kierować każde żądanie, które może odebrać do określonej kolejki, sterownik nie potrzebuje kolejki domyślnej.

Jeśli sterownik nie udostępnia kolejki we/wy dla żądań określonego typu, a jeśli sterownik jest sterownikiem funkcji, struktura kończy żądania tego typu z wartością stanu ukończenia STATUS_INVALID_DEVICE_REQUEST. Jeśli sterownik jest sterownikiem filtru i wywołał WdfFdoInitSetFilter, framework automatycznie przekazuje te żądania do następnego sterownika niższego poziomu w stosie sterowników. W związku z tym sterownik filtru, który nie przetwarza żądań odczytu, nie musi udostępniać kolejki we/wy odbierającej żądania odczytu.

Aby zapoznać się z przykładami sposobów użycia kolejek we/wy przez sterowniki, zobacz Przykładowe zastosowania kolejek we/wy.