システム電源状態についての IRP_MN_SET_POWER の処理
電源マネージャーは、以下のいずれかの理由により、マイナー コード IRP_MN_SET_POWER とシステム電源状態を指定する電源 IRP を送信します。
システムの電源状態を変更するため。
IRP_MN_QUERY_POWER 要求が失敗した後、現在の電源状態を再確認するため。
I/O マネージャーを通じて、電源マネージャーは、各 PnP デバイス ノードのデバイス スタックの最上位のドライバーに IRP を送信します。 IRP は、スタック内のすべてのドライバーに正しいシステム電源状態を通知します。
電源マネージャーは、順番に起動するため、システムの電源投入 IRP を順序付けて、子の起動前に電源をオンにする機会が親デバイスに与えらえるようにします。 電源マネージャーは、システムの電源投入 IRP を送信する前にクエリを実行しません。
同様に、コンピューターが正常な方法でスリープまたはシャットダウンされるようにするため、電源マネージャーは、定義されたシーケンスでスリープ、休止、またはシャットダウンを指定するシステム IRP を送信し、デバイスがルートに近くなる前にルートから離れるようにします。 可能な限り、電源マネージャーはこのような IRP を送信する前にクエリを実行します。 詳細は、「システム電源状態に対応する IRP_MN_QUERY_POWER の処理」を参照してください。
システム電源 IRP は、電源状態を変更する直接の要求ではなく、通知です。 ドライバーは、システムの電源 IRP に対する直接の応答として、デバイスの電源状態を変更しないでください。ドライバーは、デバイスの電源 IRP への応答でのみ、そのデバイスの電源状態を変更します。 (デバイスの電源ポリシー所有者がデバイスの電源 IRP を送信します。「デバイス電源ポリシー所有者のシステム電源設定 IRP の処理」をご覧ください)。
要求されたシステム電源状態に対して有効なデバイスの電源状態が既にデバイスにある場合でも、各ドライバーは、バス ドライバーに到達するまで、システムの設定電源 IRP を次の下位ドライバーに渡す必要があります。 この IRP を完了できるのは、バス ドライバーだけです。
ドライバーがこの IRP を処理する方法は、以下のセクションで説明するように、デバイス スタックでの役割によって異なります。
デバイス電源ポリシー所有者のシステム電源設定 IRP の処理
ドライバーは、システムの電源状態を設定するために IRP_MN_SET_POWER 要求に失敗してはなりません。 電源マネージャーは、この IRP に返されたエラー状態を無視します。