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 tworzy kolejkę we/wy, może określić, czy kolejka jest zarządzana energią. Gdy żądania we/wy są dostępne w kolejce zarządzanej przez zasilanie, platforma dostarcza żądania do sterownika tylko wtedy, gdy urządzenie znajduje się w stanie roboczym (D0). Struktura nie zezwala urządzeniu na pozostawienie stanu pracy do momentu, aż wszystkie żądania we/wy dostarczone przez platformę z kolejki zarządzanej przez zasilanie do sterownika zostały ukończone, anulowane lub przełożone.
Aby uzyskać więcej informacji na temat kolejek We/Wy zarządzanych energią, zobacz Power Management for I/O Queues.
Funkcje wywołania zwrotnego dla kolejek Power-Managed
Jeśli sterownik korzysta z kolejek we/wy zarządzanych przez zasilanie, może udostępnić dwie funkcje dodatkowych wywołań zwrotnych:
EvtIoStop
Funkcja zwrotna EvtIoStop zatrzymuje przetwarzanie określonego żądania I/O. Gdy urządzenie opuści stan pracy (D0) lub zostanie usunięte, framework wywołuje funkcję wywołania zwrotnego EvtIoStop kolejki we/wy raz dla każdego żądania we/wy, których sterownik nie ukończył, w tym żądania, które sterownik posiada i te, które zostały przekazane do obiektu docelowego we/wy.
EvtIoResume
Wywołanie zwrotne EvtIoResume wznawia przetwarzanie wcześniej zatrzymanego żądania I/O. Platforma wywołuje funkcję wywołania zwrotnego kolejki I/O EvtIoResume, gdy wznawia dostarczanie żądań I/O do sterownika z kolejki, po powrocie urządzenia do stanu pracy.
Za każdym razem, gdy framework wywołuje funkcję zwrotną EvtIoStop sterownika, funkcja zazwyczaj kończy lub anuluje żądanie we/wy lub wywołuje WdfRequestStopAcknowledge, aby zwrócić własność żądania do frameworku.
Chociaż to jest opcjonalne, należy ogólnie udostępnić funkcję EvtIoStop jako wywołanie zwrotne dla kolejki zarządzanej przez zasilanie. Dostarczając EvtIoStop, sterownik może pomóc skrócić czas, który upływa zanim urządzenie, a być może także system, przejdzie w stan niskiego poboru mocy.
Jeśli nie udostępnisz elementu EvtIoStop dla kolejki zarządzanej przez zasilanie, platforma czeka, aż wszystkie żądania dostarczone z kolejki zarządzanej przez zasilanie do sterownika zostaną ukończone przed przeniesieniem urządzenia (lub systemu) do niższego stanu zasilania lub usunięcia urządzenia. Potencjalnie ta bezczynność może uniemożliwić systemowi wejście w stan hibernacji lub inny stan niskiego zasilania systemu. W skrajnych przypadkach może to spowodować awarię systemu z kodem błędu 9F.
Jeśli sterownik nie przekazuje żądań do obiektu docelowego we/wy i nie przechowuje żądań o nieokreślony czas, możesz bezpiecznie pominąć EvtIoStop dla kolejki zarządzanej przez zasilanie.
Oczekiwanie na obiekty dyspozytora
Ogólnie rzecz biorąc, sterowniki powinny używać obiektów dyspozytora wyłącznie jako mechanizmów synchronizacji w konkretnym kontekście wątku.
Ponieważ programy obsługi żądań działają w dowolnym kontekście wątku, program obsługi żądań dla kolejki zarządzanej przez zasilanie nie może czekać na skonfigurowanie obiektów dyspozytora jądra. Może to spowodować zakleszczenie.
Aby uzyskać więcej informacji na temat tego, kiedy sterownik może czekać na obiekty dyspozytora i co zrobić, gdy nie może, zobacz Wprowadzenie do obiektów dyspozytora jądra.