locked
WindowsServer2003 再起動時に「DRIVER_POWER_STATE_FAILURE」発生 RRS feed

  • 質問

  • WindowsServer2003サーバにて、OS再起動時にブルースクリーン「DRIVER_POWER_STATE_FAILURE」となってしまいます。

     

    週次でリブート運用を行っており、運用開始後2年以上問題なくできておりましたが、最近発生するようになりました。

     

    原因究明方法、もしくは、次回発生時に、原因究明のための手がかりとなるような情報を取得する手段等、ご教授願えないでしょうか?

     

     ・WindowsServer2003 Enterprize SP2 (32bit)

     

      VMware上の仮想マシンとして構築(vSphere4)

     

      ※Vmware上では、ブルスクリーン発生前後で異常メッセージ等の記録はないことをVMwareサポートに確認済み

     

     ・ブルースクリーン内容

     

      DRIVER_POWER_STATE_FAILURE

     

      STOP:0x0000009F (0x00000500,0x00000002,0x8C344CD8,0x8CD36360)

     

    以上、よろしくお願い致します。

    2013年5月20日 13:49

回答

  • 最近なにかインストールされた物が無ければ、アンチウイルスが悪さしているのかもしれませんね。
    • 回答の候補に設定 佐伯玲 2013年5月22日 0:26
    • 回答としてマーク 佐伯玲 2013年5月30日 2:49
    2013年5月21日 0:35
  • チャブーンです。

    STOPエラーがでてマシンが落ちてしまった(BSoD)場合、原因を確認するには、ダンプファイルの解析を行うといいかもしれません。

    ダンプファイルですが、Windows Server 2003であればC:\Windows\MEMORY.DMPが保存されていると思いますので、このファイルがあれば簡単な解析がが可能です。windbgというツールとインターネット接続環境が必要です。サーバ上で実行するよりクライアント上で(ダンプファイルをコピーして)実行するといいと思いますが、Windows Server 2003やXPである必要はない(Windows 7とかでも大丈夫です)です。やり方については、分かりやすいページがあったので参考にしてみてください。

    http://engineermemo.wordpress.com/2012/06/24/%E3%82%AF%E3%83%A9%E3%83%83%E3%82%B7%E3%83%A5%E3%83%80%E3%83%B3%E3%83%97%E8%A7%A3%E6%9E%90%E3%81%AE%E3%81%AF%E3%81%98%E3%82%81%E3%81%AE%E4%B8%80%E6%AD%A9/

    うえの解析でエラーを発生させたドライバが分かりますので、サードパーティの製品(に付属しているドライバ)であれば、そのベンダに報告することで問題を分析してもらえる可能性があります。

    • 回答の候補に設定 佐伯玲 2013年5月22日 0:26
    • 回答としてマーク 佐伯玲 2013年5月30日 2:49
    2013年5月21日 2:02
  • こんばんは。

    DRIVER_POWER_STATE_FAILURE は、何らかのドライバが Power State の変更処理で不正な動作をした場合に発生します。
    現時点の情報からは、被疑対象が " 全てのドライバ" になってしまいますので、まず Dump を確認し、どのドライバが不正な処理を実行しているか確認してみましょう。

    DRIVER_POWER_STATE_FAILURE は、" クラッシュダンプ解析のはじめの一歩 " に記載の方法だけでは確認できない Stop エラーのひとつです。
    解析時は、以下を参考にしてみましょう。(こちらは DRIVER_POWER_STATE_FAILURE の解析方法です )

    Kernel Mode Debugging - Scenario 2: Find the module responsible for a crash
    http://blogs.msdn.com/b/willy-peter_schaub/archive/2009/11/26/kernel-mode-debugging-scenario-find-the-module-responsible-for-a-crash.aspx


    DRIVER_POWER_STATE_FAILURE のダンプは nt!PopWaitForSystemPowerIrp あたりから nt!KeBugCheckEx が call されているため、" クラッシュダンプ解析のはじめの一歩 " に記載の !analyze コマンドで確認すると、恐らくnt!PopWaitForSystemPowerIrp が原因です、的な解析を出力する可能性があります。( 大体の Stop エラーは、Stop エラーの発生元を疑う形になりますが、DRIVER_POWER_STATE_FAILURE の場合は異なります )

    DRIVER_POWER_STATE_FAILURE は、概ね以下の Step で発生します。

    1.nt!PopSetDevicesSystemState から、各ドライバへ電源状態の遷移をリクエストする。
    2.nt!PopWaitForSystemPowerIrp で、ドライバの処理待ち。
    3.何らかのドライバの処理中に、不正動作を検知した場合、DRIVER_POWER_STATE_FAILURE が発生する

    今回の場合は、"3.何らかのドライバ" が何かを確認する必要があります。

    ちなみに、今回の場合第一パラメータが 0x00000500 なので、PoStartNextPowerIrp を call していないという不正動作になります。

    各パラメータの意味するところは以下。
    Bug Check 0x9F: DRIVER_POWER_STATE_FAILURE
    http://msdn.microsoft.com/en-us/library/windows/hardware/ff559329(v=vs.85).aspx


    ドライバの処理すべき手順はある程度決められていて、今回の場合、" ドライバは PoCallDriver を call する前に、PoStartNextPowerIrp を call する必要がある " という決まりがあります。以下に解説があります。

    PoCallDriver routine
    http://msdn.microsoft.com/ja-JP/library/windows/hardware/ff559654(v=vs.85).aspx
    >On Windows Server 2003, Windows XP, an Windows 2000, drivers must also call PoStartNextPowerIrp before calling PoCallDriver.


    不正な動作を行ったドライバ、デバイスの確認ですが、" Kernel Mode Debugging - Scenario 2: Find the module responsible for a crash " の解説の通り、Device Object のアドレスを指定してデバッガの !devstack コマンドで確認する事ができます。
    今回の場合、第三、第四パラメータが Device Object のアドレスです。

    今回のダンプが取れていれば !devstack 0x8C344CD8 と !devstack 0x8CD36360 のデバッガコマンドをダンプ解析中に実行する事になりますが、Device Object のアドレスは毎回変わります。まず Stop エラーの第三、第四パラメータを確認し、それを指定して !devstack コマンドを実行し、不正動作を行ったドライバ、デバイスを確認してみて下さい。

     

    • 回答の候補に設定 佐伯玲 2013年5月22日 0:26
    • 回答としてマーク 佐伯玲 2013年5月30日 2:49
    2013年5月21日 13:04

すべての返信

  • 最近なにかインストールされた物が無ければ、アンチウイルスが悪さしているのかもしれませんね。
    • 回答の候補に設定 佐伯玲 2013年5月22日 0:26
    • 回答としてマーク 佐伯玲 2013年5月30日 2:49
    2013年5月21日 0:35
  • チャブーンです。

    STOPエラーがでてマシンが落ちてしまった(BSoD)場合、原因を確認するには、ダンプファイルの解析を行うといいかもしれません。

    ダンプファイルですが、Windows Server 2003であればC:\Windows\MEMORY.DMPが保存されていると思いますので、このファイルがあれば簡単な解析がが可能です。windbgというツールとインターネット接続環境が必要です。サーバ上で実行するよりクライアント上で(ダンプファイルをコピーして)実行するといいと思いますが、Windows Server 2003やXPである必要はない(Windows 7とかでも大丈夫です)です。やり方については、分かりやすいページがあったので参考にしてみてください。

    http://engineermemo.wordpress.com/2012/06/24/%E3%82%AF%E3%83%A9%E3%83%83%E3%82%B7%E3%83%A5%E3%83%80%E3%83%B3%E3%83%97%E8%A7%A3%E6%9E%90%E3%81%AE%E3%81%AF%E3%81%98%E3%82%81%E3%81%AE%E4%B8%80%E6%AD%A9/

    うえの解析でエラーを発生させたドライバが分かりますので、サードパーティの製品(に付属しているドライバ)であれば、そのベンダに報告することで問題を分析してもらえる可能性があります。

    • 回答の候補に設定 佐伯玲 2013年5月22日 0:26
    • 回答としてマーク 佐伯玲 2013年5月30日 2:49
    2013年5月21日 2:02
  • こんばんは。

    DRIVER_POWER_STATE_FAILURE は、何らかのドライバが Power State の変更処理で不正な動作をした場合に発生します。
    現時点の情報からは、被疑対象が " 全てのドライバ" になってしまいますので、まず Dump を確認し、どのドライバが不正な処理を実行しているか確認してみましょう。

    DRIVER_POWER_STATE_FAILURE は、" クラッシュダンプ解析のはじめの一歩 " に記載の方法だけでは確認できない Stop エラーのひとつです。
    解析時は、以下を参考にしてみましょう。(こちらは DRIVER_POWER_STATE_FAILURE の解析方法です )

    Kernel Mode Debugging - Scenario 2: Find the module responsible for a crash
    http://blogs.msdn.com/b/willy-peter_schaub/archive/2009/11/26/kernel-mode-debugging-scenario-find-the-module-responsible-for-a-crash.aspx


    DRIVER_POWER_STATE_FAILURE のダンプは nt!PopWaitForSystemPowerIrp あたりから nt!KeBugCheckEx が call されているため、" クラッシュダンプ解析のはじめの一歩 " に記載の !analyze コマンドで確認すると、恐らくnt!PopWaitForSystemPowerIrp が原因です、的な解析を出力する可能性があります。( 大体の Stop エラーは、Stop エラーの発生元を疑う形になりますが、DRIVER_POWER_STATE_FAILURE の場合は異なります )

    DRIVER_POWER_STATE_FAILURE は、概ね以下の Step で発生します。

    1.nt!PopSetDevicesSystemState から、各ドライバへ電源状態の遷移をリクエストする。
    2.nt!PopWaitForSystemPowerIrp で、ドライバの処理待ち。
    3.何らかのドライバの処理中に、不正動作を検知した場合、DRIVER_POWER_STATE_FAILURE が発生する

    今回の場合は、"3.何らかのドライバ" が何かを確認する必要があります。

    ちなみに、今回の場合第一パラメータが 0x00000500 なので、PoStartNextPowerIrp を call していないという不正動作になります。

    各パラメータの意味するところは以下。
    Bug Check 0x9F: DRIVER_POWER_STATE_FAILURE
    http://msdn.microsoft.com/en-us/library/windows/hardware/ff559329(v=vs.85).aspx


    ドライバの処理すべき手順はある程度決められていて、今回の場合、" ドライバは PoCallDriver を call する前に、PoStartNextPowerIrp を call する必要がある " という決まりがあります。以下に解説があります。

    PoCallDriver routine
    http://msdn.microsoft.com/ja-JP/library/windows/hardware/ff559654(v=vs.85).aspx
    >On Windows Server 2003, Windows XP, an Windows 2000, drivers must also call PoStartNextPowerIrp before calling PoCallDriver.


    不正な動作を行ったドライバ、デバイスの確認ですが、" Kernel Mode Debugging - Scenario 2: Find the module responsible for a crash " の解説の通り、Device Object のアドレスを指定してデバッガの !devstack コマンドで確認する事ができます。
    今回の場合、第三、第四パラメータが Device Object のアドレスです。

    今回のダンプが取れていれば !devstack 0x8C344CD8 と !devstack 0x8CD36360 のデバッガコマンドをダンプ解析中に実行する事になりますが、Device Object のアドレスは毎回変わります。まず Stop エラーの第三、第四パラメータを確認し、それを指定して !devstack コマンドを実行し、不正動作を行ったドライバ、デバイスを確認してみて下さい。

     

    • 回答の候補に設定 佐伯玲 2013年5月22日 0:26
    • 回答としてマーク 佐伯玲 2013年5月30日 2:49
    2013年5月21日 13:04
  • こんにちは、YUSUKE.A さん
    フォーラムオペレータの佐伯 玲 です。

    その後の状況はいかがでしょうか?
    みなさんからご参考になりそうな情報が寄せられておりましたので私の方で「回答としてマーク」をさせていただきました。

    ご確認いただきご不明な点等あれば引き続きこちらのスレッドへご返信くださいませ。

    宜しくお願い致します。
    __________________________
    日本マイクロソフト株式会社 フォーラム オペレータ 佐伯 玲
    2013年5月30日 2:48