Delen via


IRP_MN_SET_POWER

Met dit IRP wordt een stuurprogramma van een wijziging in de systeemstroomstatus gemeld of wordt de apparaatstroomstatus voor een apparaat ingesteld.

Primaire code

IRP_MJ_POWER

Wanneer verzonden

De systeembeheerder of de eigenaar van het apparaatbeheerbeleid kan deze IRP verzenden.

De power manager verzendt deze IRP om stuurprogramma's op de hoogte te stellen van een wijziging in de systeemstroomstatus. Als een stuurprogramma het apparaat registreert voor niet-actieve detectie, verzendt power manager deze IRP om de energiestatus van een niet-actief apparaat te wijzigen.

Een stuurprogramma dat eigenaar is van het energiebeleid verzendt deze IRP om de energiestatus van het apparaat in te stellen voor het apparaat. Een stuurprogramma moet PoRequestPowerIrp aanroepen om deze IRP te verzenden.

De power manager verzendt deze IRP bij IRQL = PASSIVE_LEVEL naar apparaatstacks die de DO_POWER_PAGABLE vlag in de PDO instellen. Stuurprogramma's in dergelijke stacks kunnen code of gegevens aanraken om de aanvraag te voltooien.

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 paginacode of gegevens.

Invoerparameters

Het lid Parameters.Power.Type geeft het type energiestatus op dat wordt ingesteld, SystemPowerState of DevicePowerState.

Het lid Parameters.Power.State geeft als volgt de energiestatus zelf 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.

Het lid Parameters.Power.ShutdownType geeft aanvullende informatie op over de aangevraagde overgang. De mogelijke waarden voor dit lid zijn POWER_ACTION opsommingswaarden. Zie System Power Actions voor meer informatie.

Het lid Parameters.Power.SystemPowerStateContext is een alleen-lezen, gedeeltelijk ondoorzichtige SYSTEM_POWER_STATE_CONTEXT structuur die informatie bevat over de vorige systeemstroomstatussen van een computer. Als Parameters.Power.TypeSystemPowerState en Parameters.Power.StatePowerSystemWorking is, geven twee vlag-bits in deze structuur aan of een snelle opstartbewerking of een wake-from-sluimerstand ervoor zorgde dat de computer de S0-systeemstatus (werkende) instapte. Zie Distinguishing Fast Startup van Wake-from-Hibernation voor meer informatie.

Context van systeemstroomovergang voor IRP_MN_SET_POWER

In de volgende tabel ziet u de inhoud van IRP_MN_SET_POWER. Parameters.Power. {State|ShutdownType} en de velden CurrentSystemState, TargetSystemState en EffectiveSystemState in de SYSTEM_POWER_STATE_CONTEXT structuur voor elke systeemstroomovergang. Elke rij vertegenwoordigt één IRP_MN_SET_POWER.

Overgang Staat Type afsluiting Huidige systemstate Doelsysteemstatus Effectieve SystemState Opmerkingen
Slaapstand naar... S3 Slapen S0 S3 S3
... Wekken S0 Slapen S3 S0 S0
Hybride slaapstand naar... S4 Hibernate S0 S3 S4 Slaapstand met sluimerstandbestand (Fast S4)
... Wekken S0 Slapen S3 S0 S0
... Wake/PwrLost S0 Slapen S4 S0 S0
Sluimerstand naar... S4 Hibernate S0 S4 S4
... Wekken S0 Slapen S4 S0 S0
Hybride afsluiten naar... S4 Hibernate S0 S5 S4 Apps gesloten, gebruiker afgemeld alsof het afsluiten (slaapstand opstarten)
... Snel opstarten S0 Slapen S4 S0 S0
Afsluiten naar... S5 Afsluiten/opnieuw instellen/uitschakelen S0 S5 S5
... Systeem opstarten Geen S-IRP voor opstarten

Uitvoerparameters

Parameters.Power.SystemContext is gereserveerd voor systeemgebruik.

I/O-statusblok

Een stuurprogramma stelt Irp-IoStatus.Status> in op STATUS_SUCCESS om aan te geven dat het apparaat de aangevraagde status heeft ingevoerd.

Een stuurprogramma mag een aanvraag om de systeemstroomstatus in te stellen niet mislukken.

Functie- en filterstuurprogramma's die zich boven een busstuurprogramma bevinden, mogen geen aanvraag voor het instellen van de energiestatus van een apparaat mislukken. Het busstuurprogramma kan een aanvraag voor het inschakelen van een apparaat mislukken als het apparaat wordt verwijderd of wordt verwijderd.

Operatie

De power manager of een stuurprogramma kan een IRP_MN_SET_POWER IRP aanvragen. De power manager verzendt dit IRP om een van de volgende redenen:

  • Stuurprogramma's op de hoogte stellen van een wijziging in de systeemstroomstatus

  • De energiestatus van een apparaat wijzigen waarvoor power manager niet-actieve detectie uitvoert

  • Om de huidige systeemstatus opnieuw te bevestigen nadat een stuurprogramma een IRP_MN_QUERY_POWER aanvraag voor een systeemstroomstatus mislukt. Zie IRP_MN_QUERY_POWER voor meer informatie.

Een stuurprogramma dat eigenaar is van het energiebeleid voor apparaten verzendt IRP_MN_SET_POWER om de energiestatus van het apparaat te wijzigen.

Op elk gewenst moment staat het systeem toe dat slechts één dergelijke IRP actief is voor elk apparaatobject.

Elk stuurprogramma moet elk energie-IRP doorgeven aan het volgende lagere stuurprogramma door IoCallDriver aan te roepen (te beginnen met Windows Vista) of PoCallDriver (Windows Server 2003, Windows XP en Windows 2000). De PoCallDriver-interface is vergelijkbaar met die van IoCallDriver, behalve dat het subsysteem voor energiebeheer de IRP kan vertragen voordat deze wordt doorgegeven aan het volgende stuurprogramma. Vertragingen kunnen bijvoorbeeld optreden op een PowerDeviceD0-aanvraag als het apparaat stroom inrush vereist en daarom serieel moet worden ingeschakeld met een ander dergelijk apparaat.

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

IRP_MN_SET_POWER voor systeemstroomstatussen

Alleen de systeembeheerder kan een systeemset-energie-IRP verzenden.

Een stuurprogramma mag een aanvraag om de systeemstroomstatus in te stellen niet mislukken.

Indien mogelijk verzendt de power manager IRP_MN_QUERY_POWER voordat IRP_MN_SET_POWER wordt verzonden om een systeemsluimerstand aan te vragen. Onder bepaalde omstandigheden (zoals de gebruiker die op de knop Uit of een batterij drukt), kan de power manager echter IRP_MN_SET_POWER geven zonder eerst een query uit te voeren. De Power Manager voert alleen query's uit voor slaapstanden; het voert nooit query's uit voordat het wordt opgevraagd.

De IRP_MN_SET_POWER aanvraag wordt verzonden naar het bovenste stuurprogramma in de apparaatstack voor een apparaat. De bovenste bestuurder passeert de IRP naar de volgende lagere bestuurder, enzovoort, totdat de IRP de buschauffeur bereikt, die de IRP moet voltooien.

Een filterstuurprogramma hoeft doorgaans niet te reageren op een systeemset-energie-IRP, behalve om het door te geven.

De eigenaar van het apparaatbeheerbeleid stelt echter een IoCompletion-routine in voordat de IRP wordt doorgegeven. In de IoCompletion-routine wordt een IRP_MN_SET_POWER aanvraag voor een apparaatstroom-IRP verzonden. Zie Voor meer informatie het verwerken van een systeem Set-Power IRP in een apparaat powerbeleidseigenaar.

Een systeemset-energie-IRP informeert stuurprogramma's dat een wijziging in de energiestatus van het systeem aanstaande is en dat de stuurprogramma's zich hiervoor moeten voorbereiden. Een stuurprogramma mag de energiestatus van het apparaat echter pas wijzigen nadat het een IRP_MN_SET_POWER ontvangt voor de energiestatus van een apparaat.

De waarde bij Parameters.Power.ShutdownType biedt aanvullende informatie over de acties die in behandeling zijn. Wanneer de IRP PowerSystemShutdown (S5) opgeeft, kan een stuurprogramma bepalen of het systeem opnieuw wordt opgestart (PowerActionShutdownReset) of 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 videostreamingapparaten, kan een stuurprogramma het apparaat echter uitschakelen om I/O te stoppen wanneer het systeem opnieuw wordt ingesteld.

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

Apparaatstroomstatussen

Functie- en filterstuurprogramma's die zich boven een busstuurprogramma bevinden, mogen geen aanvraag voor het instellen van de energiestatus van een apparaat mislukken. Het busstuurprogramma kan een aanvraag voor het inschakelen van een apparaat mislukken als het apparaat wordt verwijderd of wordt verwijderd.

Een stuurprogramma moet het apparaat in de aangevraagde status instellen voordat het IRP wordt voltooid.

Wanneer de IRP een overgang naar een lagere energiestatus aanvraagt, moeten stuurprogramma's de IRP verwerken terwijl deze omlaag gaat in de apparaatstack, waardoor de context wordt opgeslagen die het stuurprogramma nodig heeft om het apparaat te herstellen naar de werkstatus. Nadat een buschauffeur een IRP heeft ontvangen, is de chauffeur:

  • Hiermee wordt een context opgeslagen die het stuurprogramma nodig heeft om het apparaat te herstellen naar de werkstatus.

  • Hiermee stelt u het apparaat in op de aangevraagde energiestatus.

  • Roept PoSetPowerState aan om de power manager op de hoogte te stellen.

  • Roept PoStartNextPowerIrp aan om de volgende energie-IRP (alleen Windows Server 2003, Windows XP en Windows 2000) te starten.

  • Hiermee voltooit u de apparaatstroom-IRP.

De bestuurder moet deze IRP tijdig voltooien. Over het algemeen moeten stuurprogramma's eventuele vertraging voorkomen die een typische gebruiker merkbaar traag vindt. Een stuurprogramma kan bijvoorbeeld een wijziging van de systeemstatus vertragen om schijf- of netwerkgegevens in de cache leeg te maken, maar moet een netwerkverbinding niet actief houden of een tape formatteren. Zie Power IRPs doorgeven voor meer informatie.

Als in Windows 2000 en latere versies van het besturingssysteem, als de IRP PowerDeviceD1, PowerDeviceD2 of PowerDeviceD3 opgeeft en een systeemset-IRP actief is, biedt de waarde bij Parameters.Power.ShutdownType informatie over de systeem-IRP.

Stuurprogramma's van apparaten in het sluimerstandpad moeten deze waarde inspecteren. Als de IRP PowerDeviceD3 aanvraagt en ShutdownTypePowerActionHibernate is, moet een dergelijk stuurprogramma alle context opslaan die nodig is om het apparaat te herstellen, maar het apparaat niet uitschakelen; het apparaat de D3-status invoert wanneer de machine stroom verliest.

In Windows 2000 en latere versies van het besturingssysteem moeten stuurprogramma's niet afhankelijk zijn van de waarde bij ShutdownType als de aangevraagde energiestatus PowerDeviceD0 is.

In Windows 98/Me, als de IRP een energiestatus van een apparaat aanvraagt, is het ShutdownType altijd PowerActionNone.

Het stuurprogramma dat bepaalt wanneer een apparaat moet worden uitgeschakeld, is afhankelijk van de apparaatklasse.

Het stuurprogramma dat bepaalt wanneer een apparaat moet worden ingeschakeld, is bijna altijd een stuurprogramma dat het apparaat opent. Het stuurprogramma moet controleren of het apparaat de status D0 heeft voordat het apparaat de hardwareregisters van het apparaat opent. Als het apparaat niet de status D0 heeft, moet het stuurprogramma PoRequestPowerIrp aanroepen om een IRP te verzenden om het apparaat in te schakelen. Een stuurprogramma heeft geen toegang tot het apparaat, tenzij het apparaat de status D0 heeft.

Wanneer een stuurprogramma een IRP voor de apparaatstatus D0 ontvangt, wordt een IoCompletion-routine ingesteld en wordt de IRP doorgegeven aan het volgende lagere stuurprogramma.

Wanneer het IRP het busstuurprogramma bereikt, is dat stuurprogramma alleen van toepassing (of opnieuw ingesteld) op het apparaat, roept PoStartNextPowerIrp (Alleen Windows Server 2003, Windows XP en Windows 2000) aan en roept u PoSetPowerState aan om de energiebeheerder op de hoogte te stellen van de nieuwe energiestatus voor het apparaat.

Nadat het busstuurprogramma de in-/uitschakelende IRP heeft voltooid, verwerken functie- en filterstuurprogramma's de IRP in hun IoCompletion-routines terwijl het teruggaat naar de apparaatstack. In de IoCompletion-routine herstelt of initialiseert elk stuurprogramma de apparaatcontext en voert alle andere vereiste opstarttaken uit.

Zie IRP_MN_SET_POWER voor apparaatstroomstatussen verwerken voor meer informatie.

Behoeften

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

Zie ook

DEVICE_POWER_STATE

IoCallDriver

IRP_MN_QUERY_POWER

PoCallDriver

PoStartNextPowerIrp

PoSetPowerState

PoRequestPowerIrp

SYSTEM_POWER_STATE

SYSTEM_POWER_STATE_CONTEXT