none
Windows7でのスリープ、休止状態の取得方法について RRS feed

  • 質問

  • この度、Windows7用のデバイスドライバーを作成しておりますが、
    ・スリープに入るとき、スリープから復帰したとき
    ・休止状態に入るとき、休止状態から復帰したとき
    に特別な処理を行いたいと考えております。

    上記4つの状態を何らかの方法で取得したいのですが、
    何らかの方法で可能でしょうか?

    開発環境はWDK7600です。

    お手数ですが、ご教授の程、よろしくお願いいたします。
    • 移動 Mike Wang (MSCS) 2012年10月2日 12:35 (移動元:Windows デバイスドライバー開発)
    2010年3月18日 1:59

回答

  • どのようなドライバを開発されているのかわかりませんので、この返信が役に立つかどうかはわかりませんが...

    ご質問にある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
    2010年3月18日 11:24

すべての返信

  • どのようなドライバを開発されているのかわかりませんので、この返信が役に立つかどうかはわかりませんが...

    ご質問にある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
    2010年3月18日 11:24
  • ニコチャン大王 さん


    わかりやすいご説明ありがとうございました!

    2010年3月19日 0:20