syghの新フラグメント置き場

プログラミングTipsやコード断片の保管場所です。お絵描きもときどき載せます。

Windowsが休止状態から復帰できない問題(KP41病)と仮想メモリ

昨年末は諸事情で実家に緊急帰省して、年明けに帰ってきたんですが、Windows 10 ProのデスクトップPCを休止状態*1から復帰させようとしても、電源は入るのにOSが正常に復帰しない現象が出ました。
電源ボタン長押しで強制シャットダウン&再起動した後、休止状態にすると再発します。
イベントログにはKernel-Power 41の悪名高いエラー(いわゆるKP41病)が記録されていました。

KP41は様々な要因によって引き起こされますが、休止状態から復帰できない場合の対処方法を色々試してみたところ、どうやら仮想メモリページングファイルが原因だったようです。
(もともと高速スタートアップは無効化していたので除外)

グループポリシーエディター(Proエディションでないと使えない)で、
「コンピューターの構成」→「Windows の設定」→「セキュリティの設定」→「ローカル ポリシー」→「セキュリティ オプション」にて、
「シャットダウン: 仮想メモリのページ ファイルをクリアする」を有効化します。これだけです。

以下、「説明」タブの引用。

シャットダウン: 仮想メモリのページ ファイルをクリアする

このセキュリティ設定は、システムのシャットダウン時に仮想メモリのページ ファイルをクリアするかどうかを指定します。

仮想メモリ機能では、システム ページ ファイルを使用して、メモリのページが使用されていないときにそのページをディスクに書き出します。実行中のシステムでは、オペレーティング システムがこのページ ファイルを排他的に開いており、ページファイルは適切に保護されています。ただし、他のオペレーティング システムを起動できるよう構成されているシステムでは、システムのシャットダウン時にページ ファイルを確実にクリアする必要のある場合があります。ページ ファイルをクリアすることにより、プロセス メモリからページ ファイルに移動する可能性のある重要な情報を、ページ ファイルに直接アクセスしようとする承認されていないユーザーに利用されないようにします。

このポリシーが有効な場合、シャットダウン時にシステム ページ ファイルがクリアされます。このセキュリティ オプションを有効にしている場合、休止状態を無効にすると、休止状態ファイル (hiberfil.sys) も削除されます。

既定値: 無効

下記と環境や現象は異なるものの、おそらく根本的な原因は同じで、休止状態になる直前にストレージに保存されるハイバネーション情報ファイルに異常なゴミデータが格納されて、休止状態からの復帰が失敗していたのだと思われます。
(デフォルトでは、シャットダウン&再起動してもページングファイルの内容がクリアされないので、休止状態に入ろうとしたときに異常なデータが保存されてしまう)

この設定を有効化する副作用として、シャットダウンに時間がかかるようになりますが、しばらく有効化して様子見とします。

*1:スリープとは異なり、メモリ内容をストレージに完全に退避させるモードです。