システム電源状態についての IRP_MN_QUERY_POWER の処理
電源マネージャーは、Parameters.Power.Type にマイナー IRP コード IRP_MN_QUERY_POWER と SystemPowerState を持つ電源 IRP を送信し、指定されたシステム電源状態 (S1-S5) に安全に変更できるかどうかを判断し、ドライバーがこのような変更に備えることができるようにします。
可能であれば必ず、電源マネージャーは、より低い (電力の少ない) 状態を要求する IRP_MN_SET_POWER を送信する前にクエリを実行します。 ただし、バッテリが故障した場合は電力損失が起ころうとしている場合、電源マネージャーは最初にクエリを実行せずに設定電源 IRP を送信します。 電源マネージャーが、IRP を送信する前にクエリを送信して、システムを動作状態 (S0) に設定することはありません。
デバイスの電源ポリシー所有者がシステム クエリ電源要求を処理する方法については、「デバイス電源ポリシー所有者でのシステム クエリ電源 IRP の処理」をご覧ください。
ドライバー (デバイス電源ポリシー所有者ではない) がシステム クエリ電源要求を処理する方法については、以下をご覧ください。
フィルター ドライバーまたはファンクション ドライバーでのシステム電源クエリ IRP の処理
フィルター ドライバーまたはファンクション ドライバーでのシステム電源クエリ IRP の失敗
ドライバーは、システム クエリに応答してデバイス IRP_MN_SET_POWER 要求を送信してはなりません。システムの電源設定要求を受信した後のみ、このような IRP を要求します。
電源マネージャーは、システム上の各デバイス スタックにシステム クエリ IRP を送信するため、他のデバイスのドライバーが正常に完了している間に、1 つのデバイスのドライバーがクエリに失敗する可能性があります。 Windows Vista 以降では、システムの電源状態をスリープ状態に変更することは、重大な電源状態の変更です。 ドライバーがシステム クエリ電源 IRP に失敗した場合でも、Windows Vista の電源マネージャーは、システムの電源状態をスリープ状態に変更する可能性があります。 さらに、クエリがアクティブな間にバッテリの有効期限が切れる可能性があるため、すぐにシャットダウンする必要があります。 そのため、クエリ IRP の後、ドライバーは、以下のいずれかの電源 IRP を受け取る準備を行う必要があります。
クエリされた状態への IRP_MN_SET_POWER
別の電源状態への IRP_MN_SET_POWER
現在の電源状態への IRP_MN_SET_POWER
任意の状態への IRP_MN_QUERY_POWER
ただし、ドライバーは通常、システム クエリ IRP の後にシステム設定電源 IRP を受け取ります。 いずれにしても、ドライバーは、ドライバーがクエリ電源 IRP に失敗した場合でも、システムの電源状態を変更する準備ができている必要があります。