Freigeben über


Behandeln eines System Set-Power IRP in einem Filtertreiber

Alle Filtertreiber und alle Funktionstreiber, die keine Energierichtlinie für ihren Gerätestapel besitzen, sollten einfach den IRP des Systemsatzs an den nächstniedrigen Treiber übergeben, in den folgenden Schritten:

  1. Rufen Sie IoAcquireRemoveLock an, und übergeben Sie die aktuelle IRP, um sicherzustellen, dass der Treiber keine PnP-IRP_MN_REMOVE_DEVICE-Anforderung empfängt, während er die Energie-IRP verarbeitet.

    Wenn IoAcquireRemoveLock einen Fehler status zurückgibt, sollte der Treiber die Verarbeitung des IRP nicht fortsetzen. Stattdessen sollte der Treiber ab Windows Vista IoCompleteRequest aufrufen, um die IRP abzuschließen und den Fehler status zurückzugeben. In Windows Server 2003, Windows XP und Windows 2000 sollte der Treiber zuerst PoStartNextPowerIrp aufrufen, IoCompleteRequest aufrufen, um die IRP abzuschließen, und dann den Fehler status zurückgeben.

  2. Rufen Sie PoStartNextPowerIrp auf, um die nächste Energie-IRP zu starten. (Nur Windows Server 2003, Windows XP und Windows 2000.)

  3. Legen Sie den IRP-Stapelspeicherort fest (IoSkipCurrentIrpStackLocation oder IoCopyCurrentIrpStackLocationToNext). Der Treiber kann eine IoCompletion-Routine im IRP festlegen, dies ist jedoch selten erforderlich.

  4. Rufen Sie IoCallDriver (in Windows 7 und Windows Vista) oder PoCallDriver (in Windows Server 2003, Windows XP und Windows 2000) auf, um den IRP an den nächstniedrigen Treiber zu übergeben.

  5. Rufen Sie IoReleaseRemoveLock auf. Wenn der Treiber jedoch eine IoCompletion-Routine für das IRP festgelegt hat, rufen Sie stattdessen von der IoCompletion-Routine ab.

  6. Gibt STATUS_PENDING aus der DispatchPower-Routine zurück.