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.
Ten protokół IRP wysyła zapytanie do urządzenia w celu określenia, czy można zmienić stan zasilania systemu, czy stan zasilania urządzenia.
Kod główny
Po wysłaniu
Menedżer zasilania lub właściciel zasad zasilania urządzenia wysyła ten protokół IRP, aby określić, czy może zmienić stan zasilania systemu lub urządzenia, zwykle przechodzi w stan uśpienia. Sterownik musi wywołać element PoRequestPowerIrp , aby przydzielić i wysłać ten protokół IRP.
Menedżer zasilania wysyła ten protokół IRP w irQL = PASSIVE_LEVEL do stosów urządzeń, które ustawiają flagę DO_POWER_PAGABLE w pdO.
Menedżer zasilania może wysłać protokół IRP w irQL = DISPATCH_LEVEL, jeśli ustawiono flagę DO_POWER_INRUSH. Takie sterowniki nie mogą bezpośrednio ani pośrednio uzyskiwać dostępu do żadnego stronicowanego kodu lub danych.
Parametry wejściowe
Parameters.Power.Type określa typ ustawianego stanu zasilania, SystemPowerState lub DevicePowerState.
Parameters.Power.State określa sam stan zasilania w następujący sposób:
Jeśli parametr.Power.Type to SystemPowerState, wartość jest modułem wyliczanym typu SYSTEM_POWER_STATE .
Jeśli parametr.Power.Type to DevicePowerState, wartość jest modułem wyliczanym typu DEVICE_POWER_STATE .
Parameters.Power.ShutdownType określa dodatkowe informacje o żądanym przejściu. Możliwe wartości to wyliczacze typu POWER_ACTION .
Parametry wyjściowe
Żaden.
Blok stanu we/wy
Sterownik ustawia parametr Irp-IoStatus.Status> na STATUS_SUCCESS, aby wskazać, że urządzenie może wprowadzić żądany stan. Sterownik ustawia dowolny odpowiedni stan niepowodzenia, aby wskazać, że nie może on wprowadzić żądanego stanu.
Operacja
Parametry IRP_MN_QUERY_POWER są identyczne z parametrami IRP_MN_SET_POWER. Zamiast powiadamiać sterowniki o nieodwracalnej zmianie stanu zasilania, jednak IRP_MN_QUERY_POWER zapytań, czy system lub urządzenie może wprowadzić określony stan zasilania.
Sterownik nie może zmienić stanu zasilania urządzenia w odpowiedzi na żądanie IRP_MN_QUERY_POWER .
Gdy sterownik otrzyma żądanie IRP_MN_QUERY_POWER w systemach Windows Server 2003, Windows XP i Windows 2000, sterownik musi wywołać metodę PoStartNextPowerIrp zgodnie z opisem w temacie Calling PoStartNextPowerIrp. Począwszy od systemu Windows Vista, wywoływanie polecenia PoStartNextPowerIrp nie jest wymagane i takie wywołanie nie wykonuje operacji zarządzania energią.
IRP_MN_QUERY_POWER dla stanu zasilania systemu
Menedżer zasilania wysyła ten protokół IRP, aby upewnić się, że może zmienić stan zasilania systemu bez zakłócania pracy, na przykład porzucanie połączeń sieciowych.
Jeśli to możliwe, menedżer zasilania wysyła zapytania przed wysłaniem IRP_MN_SET_POWER w celu zażądania stanu uśpienia systemu lub normalnego zamknięcia systemu. Jednak w niektórych warunkach krytycznych (takich jak naciśnięcie przycisku Wyłącz zasilania lub wygaśnięcie baterii) menedżer zasilania może wysłać żądanie IRP_MN_SET_POWER bez uprzedniego wysłania żądania zasilania zapytania. Menedżer zasilania wysyła zapytania tylko do stanów uśpienia; nigdy nie wykonuje zapytań przed powrotem do stanu roboczego.
Gdy sterownik odbiera systemowy protokół IRP dodatku Power Query, powinien on zakończyć się niepowodzeniem, jeśli nie może obsługiwać żadnego ze stanów urządzenia, które są prawidłowe dla żądanego stanu systemu. Aby uzyskać więcej informacji, zobacz DeviceState. W przeciwnym razie sterownik powinien przekazać protokół IRP do następnego niższego sterownika. Kierowca autobusu kończy IRP.
Począwszy od systemu Windows Vista, przejście do stanu uśpienia systemu jest uważane za operację krytyczną. Mimo że sterownik może zakończyć się niepowodzeniem irp zasilania systemu, menedżer zasilania może nadal zmienić stan zasilania systemu na stan uśpienia. Po odebraniu przez sterownik protokołu IRP zasilania systemu sterownik powinien być zawsze przygotowany na kolejną zmianę stanu zasilania systemu.
Gdy właściciel zasad zasilania urządzenia otrzymuje protokół IRP dodatku Power Query systemu, powinien ustawić procedurę IoCompletion w IRP przed przekazaniem go w dół. W procedurze IoCompletion powinna wysłać IRP_MN_QUERY_POWER stanu urządzenia, który jest prawidłowy dla stanu systemu, którego dotyczy zapytanie. Aby uzyskać więcej informacji, zobacz Obsługa protokołu IRP Query-Power systemowego w właścicielu zasad zasilania urządzenia.
Gdy protokół IRP określa wartość PowerSystemShutdown (S5), wartość parametru Parameters.Power.ShutdownType zawiera przyczynę zamknięcia. Wartość ShutdownType informuje sterownik, czy system jest resetowany (PowerActionShutdownReset) lub wyłącza się na czas nieokreślony w celu późniejszego ponownego uruchomienia (PowerActionShutdownOff). W przypadku sterowników większości urządzeń różnica jest niekonsekwencyjna. Jednak w przypadku niektórych urządzeń, takich jak urządzenie do przesyłania strumieniowego wideo, które wykonuje dma, sterownik może zdecydować się na wyłączenie urządzenia, gdy system jest resetujący, w związku z czym zatrzymuje wszelkie trwające operacje we/wy.
W systemach Microsoft Windows 2000 i nowszych wartość shutdownType może być również powerActionShutdown. W takim przypadku sterownik nie może określić typu zamknięcia i dlatego powinien kontynuować resetowanie.
Jeśli sterownik zakończy się niepowodzeniem IRP_MN_QUERY_POWER żądanie stanu zasilania systemu, menedżer zasilania zazwyczaj odpowiada, wydając IRP_MN_SET_POWER IRP. Zazwyczaj ten protokół IRP potwierdzi bieżący stan systemu. Istnieje jednak możliwość, że sterowniki mogą otrzymać IRP_MN_SET_POWER do stanu zapytania lub do innego stanu pośredniego. Kierowcy powinni być przygotowani do radzenia sobie z tymi sytuacjami.
IRP_MN_QUERY_POWER dla stanu zasilania urządzenia
Właściciel zasad zasilania urządzenia wysyła ten protokół IRP do stosu w odpowiedzi na żądanie IRP_MN_QUERY_POWER systemu.
Jeśli sterownik może umieścić swoje urządzenie w żądanym stanie urządzenia, ustawia wartość IoStatus.Status na STATUS_SUCCESS i przekazuje IRP do następnego niższego sterownika, a tak dalej, aż IRP osiągnie sterownik magistrali. Jeśli jakikolwiek sterownik w stosie musi zakończyć się niepowodzeniem, ten sterownik powinien natychmiast ukończyć protokół IRP przez wywołanie funkcji IoCompleteRequest i zwrócenie stanu błędu. Sterowniki, które kończą się niepowodzeniem protokołu IRP, nie przekazują go dalej w stosie.
Zwracając STATUS_SUCCESS, sterownik gwarantuje, że nie uruchomi żadnej operacji, która zmieni jego zdolność do ustawienia żądanego stanu zasilania. Sterownik powinien utworzyć kolejkę wszystkich środowisk IR, które wymagają takich operacji, dopóki nie zostanie ukończona funkcja IRP z mocą zestawu, która zwróci urządzenie do akceptowalnego stanu zasilania.
W systemach Windows 2000 i nowszych, gdy protokół IRP określa powerDeviceD1, PowerDeviceD2 lub PowerDeviceD3, wartość parametru Parameters.Power.ShutdownType zawiera informacje o bieżącej mocy systemu IRP, jeśli jest aktywna funkcja IRP zasilania systemu. W takim przypadku wartość w pozycji ShutdownType wskazuje aktualnie żądany stan zasilania systemu lub PowerActionNone , jeśli żądanie systemowe nie jest zaległe. W systemie Windows 98/Me to pole zawsze zawiera wartość PowerActionNone , gdy protokół IRP żąda stanu zasilania urządzenia.
Wymagania
Nagłówek: Wdm.h (w tym Wdm.h, Ntddk.h, lub Ntifs.h)