Freigeben über


Fehler bei einem System Query-Power IRP in einem Filter- oder Funktionstreiber

Ein Filter- oder Funktionstreiber (der nicht der Besitzer der Energierichtlinie für ein Gerät ist) kann eine IRP_MN_QUERY_POWER Anforderung fehlschlagen, wenn einer der folgenden Punkte zutrifft:

  • Das Gerät ist für die Aktivierung aktiviert, und der angeforderte Systemstromzustand ist weniger stromgeschützt als der Wert von SystemWake, der den Zustand mit der geringsten Stromversorgung angibt, aus dem das Gerät das System reaktivieren kann. Beispielsweise schlägt ein Gerät, das das System von S2, aber nicht von S3 reaktivieren kann, eine Abfrage für S3 fehl, aber eine Abfrage für S2 erfolgreich.

  • Wenn Sie einen Geräteleistungszustand eingeben, der dem angeforderten Zustand entspricht, muss der Treiber einen Vorgang abbrechen, bei dem Daten verloren gehen, z. B. eine offene Modemverbindung. Aus diesem Grund schlägt ein Treiber selten einen Fehler bei einer Abfrage aus. In den meisten Fällen verarbeitet die Anwendung solche Fälle.

Um eine IRP_MN_QUERY_POWER Anforderung für einen Systemstromzustand fehlzuschlagen, sollte ein Treiber die folgenden Schritte ausführen:

  1. Rufen Sie PoStartNextPowerIrp auf, um anzugeben, dass der Treiber bereit ist, die nächste Energie-IRP zu verarbeiten. (Nur Windows Server 2003, Windows XP und Windows 2000)

  2. Legen Sie Irp-IoStatus.Status> auf einen Fehler status fest, und rufen Sie IoCompleteRequest auf, und geben Sie IO_NO_INCREMENT an. Übergeben Sie die IRP nicht weiter unten im Gerätestapel.

  3. Rufen Sie IoReleaseRemoveLock auf, um die zuvor erworbene Sperre zu freigeben.

  4. Zurückgeben eines Fehlers status aus der DispatchPower-Routine.