Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Gdy sterownik odbiera żądanie we/wy, którego nie może przetworzyć, zazwyczaj wykonuje jedną z następujących czynności:
Przekazuje ono odebrane żądanie do innego sterownika.
Tworzy dodatkowe żądania i wysyła je do innego sterownika.
Sterowniki oparte na strukturze przekazują żądania przez przy użyciu obiektów docelowych we/wy, które reprezentują inne sterowniki w systemie. Sterowniki mogą używać dowolnej z następujących technik do przekazywania żądania do docelowego obiektu I/O:
Sterownik może przekazywać żądania I/O do kolejnego, niższego sterownika, wywołując WdfDeviceGetIoTarget, a następnie WdfRequestFormatRequestUsingCurrentType, a na koniec WdfRequestSend.
Ta technika jest przydatna tylko wtedy, gdy sterownik otrzyma żądanie, którego nie musi modyfikować przed przekazaniem.
Sterownik może wywołać WdfFdoInitSetFilter, aby zarejestrować się jako sterownik filtru.
Jeśli filtrujący sterownik nie udostępnia kolejki we/wy dla określonego typu żądania we/wy, platforma automatycznie przekazuje żądania tego typu do sterownika znajdującego się niżej w hierarchii.
Zazwyczaj sterownik funkcji sprawdza zawartość każdego żądania we/wy. Jeśli sterownik funkcji nie może przetworzyć żądania, może zmodyfikować żądanie i przekazać je do obiektu docelowego we/wy. Może też utworzyć jedno lub więcej nowych żądań i wysłać je do celu I/O.
Obiekt docelowy we/wy platformy definiuje kilka metod wysyłania żądań we/wy do innych sterowników. Na przykład sterownik może wywołać WdfIoTargetFormatRequestForRead, a następnie WdfRequestSend, aby wysłać żądanie odczytu do obiektu docelowego we/wy. Aby uzyskać więcej informacji na temat docelowych obiektów I/O, zapoznaj się z Using I/O Targets.
Rzadko autor sterowników może chcieć określić zawartość podstawowego WDM miejsca stosu we/wy przed wysłaniem żądania do docelowego celu we/wy. W takich przypadkach sterownik może wywołać WdfRequestWdmFormatUsingStackLocation, zanim wywoła WdfRequestSend.
Czasami sterownik musi wysłać to samo żądanie do kilku obiektów docelowych we/wy, zazwyczaj dlatego, że sterownik musi wysłać jedno polecenie do wszystkich swoich urządzeń. Przed wysłaniem żądania do docelowego obiektu I/O sterownik może wywołać WdfRequestChangeTarget, aby sprawdzić dostępność docelowego obiektu I/O.
Sterownik musi ostatecznie ukończyć każde żądanie, które jest przekazywane do docelowego obiektu we/wy, chyba że podczas wywoływania WdfRequestSend ustawia flagę WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET.
Należy pamiętać, że gdy sterownik przekazuje żądanie, framework nie przenosi obiektu żądania frameworka ze sterownika wysyłającego do sterownika odbierającego. Zamiast tego struktura tworzy nowy obiekt żądania w sterowniku, który odbiera żądanie. Tylko podstawowy pakiet żądań we/wy (IRP) jest przesyłany z jednego sterownika do drugiego.