トップ回答者
WindowsServer2003 再起動時に「DRIVER_POWER_STATE_FAILURE」発生

質問
-
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
回答
-
チャブーンです。
STOPエラーがでてマシンが落ちてしまった(BSoD)場合、原因を確認するには、ダンプファイルの解析を行うといいかもしれません。
ダンプファイルですが、Windows Server 2003であればC:\Windows\MEMORY.DMPが保存されていると思いますので、このファイルがあれば簡単な解析がが可能です。windbgというツールとインターネット接続環境が必要です。サーバ上で実行するよりクライアント上で(ダンプファイルをコピーして)実行するといいと思いますが、Windows Server 2003やXPである必要はない(Windows 7とかでも大丈夫です)です。やり方については、分かりやすいページがあったので参考にしてみてください。
うえの解析でエラーを発生させたドライバが分かりますので、サードパーティの製品(に付属しているドライバ)であれば、そのベンダに報告することで問題を分析してもらえる可能性があります。
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月21日 13:04
すべての返信
-
チャブーンです。
STOPエラーがでてマシンが落ちてしまった(BSoD)場合、原因を確認するには、ダンプファイルの解析を行うといいかもしれません。
ダンプファイルですが、Windows Server 2003であればC:\Windows\MEMORY.DMPが保存されていると思いますので、このファイルがあれば簡単な解析がが可能です。windbgというツールとインターネット接続環境が必要です。サーバ上で実行するよりクライアント上で(ダンプファイルをコピーして)実行するといいと思いますが、Windows Server 2003やXPである必要はない(Windows 7とかでも大丈夫です)です。やり方については、分かりやすいページがあったので参考にしてみてください。
うえの解析でエラーを発生させたドライバが分かりますので、サードパーティの製品(に付属しているドライバ)であれば、そのベンダに報告することで問題を分析してもらえる可能性があります。
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月21日 13:04