Delen via


IRP_MN_QUERY_POWER

Met deze IRP wordt een query uitgevoerd op een apparaat om te bepalen of de energiestatus van het systeem of de energiestatus van het apparaat kan worden gewijzigd.

Primaire code

IRP_MJ_POWER

Wanneer verzonden

De power manager of de eigenaar van een apparaatbeheerbeleid verzendt deze IRP om te bepalen of het systeem of de energiestatus van het apparaat kan worden gewijzigd, meestal om naar de slaapstand te gaan. Een stuurprogramma moet PoRequestPowerIrp aanroepen om deze IRP toe te wijzen en te verzenden.

De power manager verzendt deze IRP bij IRQL = PASSIVE_LEVEL naar apparaatstacks die de DO_POWER_PAGABLE vlag in de PDO instellen.

De power manager kan de IRP bij IRQL = DISPATCH_LEVEL verzenden als de vlag DO_POWER_INRUSH is ingesteld. Dergelijke stuurprogramma's hebben niet direct of indirect toegang tot gepaginade code of gegevens.

Invoerparameters

Parameters.Power.Type specificeert het type energiestatus dat wordt ingesteld, SystemPowerState of DevicePowerState.

Parameters.Power.State geeft de energiestatus zelf als volgt op:

  • Als Parameters.Power.TypeSystemPowerState is, is de waarde een enumerator van het SYSTEM_POWER_STATE type.

  • Als Parameters.Power.TypeDevicePowerState is, is de waarde een enumerator van het DEVICE_POWER_STATE type.

Parameters.Power.ShutdownType geeft aanvullende informatie op over de aangevraagde overgang. Mogelijke waarden zijn opsommingen van het POWER_ACTION type.

Uitvoerparameters

Geen.

I/O-statusblok

Een stuurprogramma stelt Irp-IoStatus.Status> in op STATUS_SUCCESS om aan te geven dat het apparaat de aangevraagde status kan invoeren. Een stuurprogramma stelt de juiste foutstatus in om aan te geven dat deze de aangevraagde status niet kan invoeren.

Operatie

De parameters voor IRP_MN_QUERY_POWER zijn identiek aan de parameters voor IRP_MN_SET_POWER. In plaats van stuurprogramma's op de hoogte te stellen van een onherroepelijke wijziging in de energiestatus, IRP_MN_QUERY_POWER echter query's uit of het systeem of een apparaat een bepaalde energiestatus kan invoeren.

Een stuurprogramma mag de energiestatus van het apparaat niet wijzigen in reactie op een IRP_MN_QUERY_POWER aanvraag.

Nadat een stuurprogramma een IRP_MN_QUERY_POWER aanvraag heeft ontvangen op Windows Server 2003, Windows XP en Windows 2000, moet een stuurprogramma PoStartNextPowerIrp aanroepen, zoals beschreven in PoStartNextPowerIrp. Vanaf Windows Vista is het aanroepen van PoStartNextPowerIrp niet vereist en een dergelijke oproep voert geen energiebeheerbewerking uit.

IRP_MN_QUERY_POWER voor een systeemstroomstatus

De power manager verzendt dit IRP om ervoor te zorgen dat deze de energiestatus van het systeem kan wijzigen zonder werk te verstoren, zoals het verwijderen van netwerkverbindingen.

Indien mogelijk voert de Power Manager query's uit voordat IRP_MN_SET_POWER wordt verzonden om een systeemsluimerstand aan te vragen of een normale uitschakeling van het systeem. Onder bepaalde kritieke omstandigheden (zoals de gebruiker die op de knop Uit of een batterij drukt), kan de power manager echter een IRP_MN_SET_POWER aanvraag verzenden zonder eerst een querystroomaanvraag te verzenden. De Power Manager voert alleen query's uit voor slaapstanden; er nooit query's worden uitgevoerd voordat ze terugkeren naar de werkstatus.

Wanneer een stuurprogramma een systeemstroomquery-IRP ontvangt, moet het IRP mislukken als deze geen ondersteuning biedt voor een van de apparaatstatussen die geldig zijn voor de bevraagde systeemstatus. Zie DeviceState voor meer informatie. Anders moet de bestuurder de IRP doorgeven aan het volgende lagere stuurprogramma. De buschauffeur voltooit het IRP.

Vanaf Windows Vista wordt de overgang naar een systeemsluimerstand beschouwd als een kritieke bewerking. Hoewel een stuurprogramma een systeemquery-energie-IRP kan mislukken, kan de power manager de systeemstroomstatus nog steeds wijzigen in een slaapstand. Nadat een stuurprogramma een systeemquery-energie-IRP heeft ontvangen, moet het stuurprogramma altijd worden voorbereid op een volgende wijziging in de systeemstroomstatus.

Wanneer een eigenaar van het energiebeleid van een apparaat een IRP voor systeem-powerquery ontvangt, moet deze een IoCompletion-routine instellen in de IRP voordat deze wordt doorgegeven. In de IoCompletion-routine moet er een IRP_MN_QUERY_POWER worden verzonden voor een apparaatstatus die geldig is voor de querysysteemstatus. Zie Voor meer informatie het verwerken van een systeem Query-Power IRP in een apparaat powerbeleidseigenaar.

Wanneer de IRP PowerSystemShutdown (S5) opgeeft, geeft de waarde bij Parameters.Power.ShutdownType een reden voor het afsluiten. Het ShutdownType vertelt het stuurprogramma of het systeem opnieuw wordt opgestart (PowerActionShutdownReset) of dat het voor onbepaalde tijd wordt uitgeschakeld om later opnieuw op te starten (PowerActionShutdownOff). Voor stuurprogramma's van de meeste apparaten is het verschil inconsequent. Voor bepaalde apparaten, zoals een videostreamingapparaat dat DMA uitvoert, kan een stuurprogramma er echter voor kiezen om het apparaat uit te schakelen wanneer het systeem opnieuw wordt ingesteld, waardoor lopende I/O wordt gestopt.

Op Microsoft Windows 2000- en hogersystemen kan de waarde bij ShutdownType ook PowerActionShutdown zijn. In dit geval kan de bestuurder niet zien welk type afsluiting wordt aangevraagd en moet daarom doorgaan met het opnieuw instellen.

Als een stuurprogramma een IRP_MN_QUERY_POWER aanvraag voor een systeemstroomstatus mislukt, reageert de power manager doorgaans door een IRP_MN_SET_POWER IRP uit te geven. Normaal gesproken bevestigt deze IRP de huidige systeemstatus. Het is echter mogelijk dat stuurprogramma's een IRP_MN_SET_POWER ontvangen voor de querystatus of een andere tussenliggende status. Stuurprogramma's moeten voorbereid zijn om deze situaties af te handelen.

IRP_MN_QUERY_POWER voor een apparaatstroomstatus

Een eigenaar van het apparaatbeheerbeleid stuurt deze IRP naar de stack als reactie op een systeem IRP_MN_QUERY_POWER aanvraag.

Als een stuurprogramma het apparaat in de aangevraagde apparaatstatus kan plaatsen, wordt IoStatus.Status ingesteld op STATUS_SUCCESS en wordt de IRP doorgegeven aan het volgende lagere stuurprogramma, enzovoort totdat de IRP het busstuurprogramma bereikt. Als een stuurprogramma in de stack de IRP moet mislukken, moet dat stuurprogramma de IRP onmiddellijk voltooien door IoCompleteRequest aan te roepen en een foutstatus te retourneren. Stuurprogramma's die niet voldoen aan de IRP worden niet verder in de stack doorgegeven.

Door STATUS_SUCCESS terug te geven, garandeert het stuurprogramma dat er geen bewerking wordt gestart die de mogelijkheid wijzigt om de aangevraagde energiestatus in te stellen. Het stuurprogramma moet eventuele IR's die dergelijke bewerkingen vereisen in de wachtrij plaatsen totdat een set-energie-IRP is voltooid die het apparaat naar een acceptabele energiestatus retourneert.

Op Windows 2000- en hogersystemen, wanneer de IRP PowerDeviceD1, PowerDeviceD2 of PowerDeviceD3 opgeeft, biedt de waarde bij Parameters.Power.ShutdownType informatie over de huidige systeemstroom-IRP als een systeemstroom-IRP actief is. In dit geval geeft de waarde bij ShutdownType de momenteel aangevraagde systeemstroomstatus of PowerActionNone aan als een systeemaanvraag niet openstaand is. In Windows 98/Me bevat dit veld altijd PowerActionNone wanneer de IRP een energiestatus van een apparaat aanvraagt.

Behoeften

Rubriek: Wdm.h (inclusief Wdm.h, Ntddk.h of Ntifs.h)

Zie ook

IRP_MN_SET_POWER

PoRequestPowerIrp

PoStartNextPowerIrp