トップ回答者
Windows7でのスリープ、休止状態の取得方法について

質問
-
この度、Windows7用のデバイスドライバーを作成しておりますが、
・スリープに入るとき、スリープから復帰したとき
・休止状態に入るとき、休止状態から復帰したとき
に特別な処理を行いたいと考えております。
上記4つの状態を何らかの方法で取得したいのですが、
何らかの方法で可能でしょうか?
開発環境はWDK7600です。
お手数ですが、ご教授の程、よろしくお願いいたします。- 移動 Mike Wang (MSCS) 2012年10月2日 12:35 (移動元:Windows デバイスドライバー開発)
回答
-
どのようなドライバを開発されているのかわかりませんので、この返信が役に立つかどうかはわかりませんが...
ご質問にある4つの状態に遷移するタイミングで「特別な処理」を行いたいのであれば、
Power IRP のハンドリングを行うことで、目的の機能を実現できると思います。スリープ状態からキーボードを押下することでシステムが復帰できるのも、キーボード クラス ドライバが
Power IRP をハンドリングしているからです。例えば、スタート ボタンのメニューから <スリープ> を選択すると、カーネル モード ドライバには
IRP_MJ_POWER - IRP_MN_QUERY_POWER で PowerSystemSleepingX が通知され、これから System Power State を
スリープ状態に遷移してもよいかの問い合わせが来ます。
カーネル モード ドライバがこの問い合わせに対して承諾すると、今度は IRP_MJ_POWER - IRP_MN_SET_POWER の
PowerSystemSleepingX が通知されて、実際にスリープ状態への遷移が行われます。Power State には System Power State と Device Power State の2種類があり、いずれの Power State に関しても、
Power IRP で通知されます。
なので Power IRP を処理するドライバは、System Power State に対応して Device Power State を適切な状態に
遷移させる必要があると思います。Windows Power Manager の詳細に関しては、WDK ドキュメントあるいは下記サイトに詳細が載っていますので、
以下のトピック以降が参考になると思います。----------------------------------------------------
Implementing Power Management
http://msdn.microsoft.com/en-us/library/ms798306.aspx
----------------------------------------------------また Power IRP の詳細については、上記トピックの配下にある下記トピックが参考になると思います。
----------------------------------------------------
Handling Power IRPs
http://msdn.microsoft.com/en-us/library/ms798259.aspx
----------------------------------------------------さらに WDK では Power IRP のハンドリング方法に関する実装例をいくつかのサンプル ドライバで提供していますので、
"IRP_MJ_POWER" をキーワードに検索して、hrnb さんが開発されているデバイス タイプにあったサンプル ドライバが
存在するかを確認してみるのも良いのでは...と思います。- 回答としてマーク hrnb 2010年3月19日 0:20
すべての返信
-
どのようなドライバを開発されているのかわかりませんので、この返信が役に立つかどうかはわかりませんが...
ご質問にある4つの状態に遷移するタイミングで「特別な処理」を行いたいのであれば、
Power IRP のハンドリングを行うことで、目的の機能を実現できると思います。スリープ状態からキーボードを押下することでシステムが復帰できるのも、キーボード クラス ドライバが
Power IRP をハンドリングしているからです。例えば、スタート ボタンのメニューから <スリープ> を選択すると、カーネル モード ドライバには
IRP_MJ_POWER - IRP_MN_QUERY_POWER で PowerSystemSleepingX が通知され、これから System Power State を
スリープ状態に遷移してもよいかの問い合わせが来ます。
カーネル モード ドライバがこの問い合わせに対して承諾すると、今度は IRP_MJ_POWER - IRP_MN_SET_POWER の
PowerSystemSleepingX が通知されて、実際にスリープ状態への遷移が行われます。Power State には System Power State と Device Power State の2種類があり、いずれの Power State に関しても、
Power IRP で通知されます。
なので Power IRP を処理するドライバは、System Power State に対応して Device Power State を適切な状態に
遷移させる必要があると思います。Windows Power Manager の詳細に関しては、WDK ドキュメントあるいは下記サイトに詳細が載っていますので、
以下のトピック以降が参考になると思います。----------------------------------------------------
Implementing Power Management
http://msdn.microsoft.com/en-us/library/ms798306.aspx
----------------------------------------------------また Power IRP の詳細については、上記トピックの配下にある下記トピックが参考になると思います。
----------------------------------------------------
Handling Power IRPs
http://msdn.microsoft.com/en-us/library/ms798259.aspx
----------------------------------------------------さらに WDK では Power IRP のハンドリング方法に関する実装例をいくつかのサンプル ドライバで提供していますので、
"IRP_MJ_POWER" をキーワードに検索して、hrnb さんが開発されているデバイス タイプにあったサンプル ドライバが
存在するかを確認してみるのも良いのでは...と思います。- 回答としてマーク hrnb 2010年3月19日 0:20