Sdílet prostřednictvím


Zpracování systémového povelu Set-Power IRP v ovladači filtru

Všechny filtrační ovladače a jakýkoli funkční ovladač, který nevlastní politiku napájení pro svůj zásobník zařízení, by měly jednoduše předat systémové IRP nastavení napájení dalšímu nižšímu úrovňovému ovladači v následujících krocích:

  1. Zavolejte IoAcquireRemoveLock, předejte aktuální IRP, abyste zajistili, že ovladač neobdrží požadavek PnP IRP_MN_REMOVE_DEVICE při zpracování napájecího IRP.

    Pokud IoAcquireRemoveLock vrátí stav selhání, ovladač by neměl pokračovat ve zpracování IRP. Počínaje Windows Vista by ovladač měl zavolat IoCompleteRequest, aby dokončil IRP a vrátil stav selhání. V systému Windows Server 2003, Windows XP a Windows 2000 musí ovladač nejprve zavolat PoStartNextPowerIrp, zavolat IoCompleteRequest pro dokončení IRP a poté vrátit stav selhání.

  2. Zavolejte PoStartNextPowerIrp pro spuštění dalšího energetického IRP. (Jenom Windows Server 2003, Windows XP a Windows 2000.)

  3. Nastavte umístění zásobníku IRP (IoSkipCurrentIrpStackLocation nebo IoCopyCurrentIrpStackLocationToNext). Ovladač může nastavit rutinu IoCompletion v protokolu IRP, ale to je zřídka nutné.

  4. Zavolejte IoCallDriver (ve Windows 7 a Windows Vista) nebo PoCallDriver (v systémech Windows Server 2003, Windows XP a Windows 2000) a předejte IRP do dalšího nižšího ovladače.

  5. Zavolejte IoReleaseRemoveLock. Pokud však ovladač nastavil rutinu IoCompletion pro IRP, proveďte toto volání z rutiny IoCompletion .

  6. Vraťte STATUS_PENDING z rutiny DispatchPower.