先に要点
- Kernel-Power 41 は「前回、Windows がきれいに終了しなかった」ことを、次の起動時に記録するイベントです。重大として表示されますが、これだけではクラッシュの証拠になりません。
- 見るべきは中に入っている値です。停止コード(BugcheckCode)が0以外ならブルースクリーン、0で電源ボタンの値(PowerButtonTimestamp)が0以外なら長押しで電源を切った、両方0なら記録する間もなく止まった、と読み分けます。
- 筆者の環境の24件を並べると、停止コードありが19件、長押しが1件、両方0が2件。残りの2件はメモリを交換した直後の起動で、同じ起動で「高速スタートアップに失敗した」という記録が出ていました。この2件はクラッシュではありません。
- 部品交換の直後の41を「再発」と数えないために、同じ時刻に高速スタートアップの失敗が出ていないかを確かめる方法を載せます。
パソコンが不安定なときにイベントビューアーを開くと、「重大」の印が付いた Kernel-Power 41 がいくつも並んでいることがあります。説明文には、応答が止まった、クラッシュした、電源が予期せず切れた可能性がある、と書かれています。
これを見て「こんなにクラッシュしていたのか」と数えてしまうのは早いです。Kernel-Power 41 は結果の記録であって、原因は書かれていません。ただし、中に記録された数値を読むと、原因の方向はかなり絞れます。
この記事は、Microsoft のドキュメントに沿って Kernel-Power 41 の中身を読み分ける方法と、筆者の環境で実際に記録された24件の内訳をまとめます。
Kernel-Power 41 は、次に起動したときに書かれる
Microsoft の説明によると、Windows は起動するたびに前回きれいに終了したかどうかを確かめ、そうでなければこのイベントを記録します。そのため、記録の時刻は落ちた時刻ではなく、次に起動した時刻です。
同じタイミングで、EventLog の 6008「前回のシステムのシャットダウンは予期されていませんでした」も記録されます。こちらには前回の終了の時刻が入っているので、いつ止まったかは 6008 で分かります。
中の値を一覧で出す
イベントビューアーで1件ずつ「詳細」タブを開いても読めますが、件数が多いと大変です。PowerShell で次を実行すると、全件を1つの表で見られます。管理者権限は要りません。
Get-WinEvent -FilterHashtable @{LogName="System"; ProviderName="Microsoft-Windows-Kernel-Power"; Id=41} -MaxEvents 30 -ErrorAction SilentlyContinue |
ForEach-Object {
$d = @{}
([xml]$_.ToXml()).Event.EventData.Data | ForEach-Object { $d[$_.Name] = $_."#text" }
[pscustomobject]@{
日時 = $_.TimeCreated
停止コード = "0x{0:X}" -f [int64]$d["BugcheckCode"]
電源ボタン = $d["PowerButtonTimestamp"]
Sleep = $d["SleepInProgress"]
BootApp = "0x{0:X}" -f [int64]$d["BootAppStatus"]
}
} | Format-Table -AutoSize
BugcheckCode は10進数で記録されています。Microsoft のドキュメントも、停止コードの資料は16進数で書かれているので変換するよう案内しています。上のコマンドは変換まで済ませて表示します。
筆者の環境では、次のように出ました(抜粋)。
日時 停止コード 電源ボタン Sleep BootApp
2026/09/13 20:38:39 0x0 0 6 0xC00000D4
2026/09/11 16:02:58 0x0 0 6 0xC00000D4
2026/09/11 11:58:13 0x1A 0 0 0x0
2026/09/11 8:29:04 0x0 0 0 0x0
2026/09/11 8:25:02 0x0 134335562731934145 0 0x0
2026/09/11 8:15:03 0x133 0 0 0x0
値の組み合わせで読み分ける
Microsoft のドキュメントが挙げている場合分けを、表にするとこうなります。
| 停止コード | 電源ボタン | 読み方 | 次にやること |
|---|---|---|---|
| 0以外 | 0 | ブルースクリーン(停止エラー)で再起動した | 16進数の停止コードで原因を調べる |
| 0 | 0以外 | 電源ボタンを押し続けて切った | その前に何が起きて長押ししたのか(固まった、画面が消えた)を思い出す |
| 0 | 0 | 停止コードを書く間もなく止まった。電源が断たれた、完全に固まって電源を切った、など | 電源・メモリ・熱などハードウェア側を疑う |
電源ボタンの値が記録されるのは、4秒以上押し続けて切ったときです。ただし、固まった状態で長押しした場合は書き込みが間に合わず0になることもある、とドキュメントに書かれています。
両方0のときについて、Microsoft はさらに1つ確認を挙げています。同じころに volmgr のイベント 46「クラッシュダンプの初期化に失敗しました」が出ていないかです。出ていれば、ダンプの保存先(既定ではページファイル)の設定に問題があり、ブルースクリーンだったのに停止コードを記録できなかった可能性があります。
筆者の環境の24件の内訳
| 分類 | 件数 | 内容 |
|---|---|---|
| 停止コードあり | 19 | 0x133 が10件、0x1000007E と 0x1CA が3件ずつ、0x3B が2件、0x1A が1件 |
| 電源ボタンの長押し | 1 | 画面が固まったために長押しで切ったもの |
| 両方0 | 2 | 記録する間もなく止まったもの |
| 両方0だが、Sleep と BootApp に値がある | 2 | メモリを交換した直後の起動 |
停止コードが1〜2種類に集中せず、何種類にも散らばっているのは、この環境ではメモリの故障が原因でした(切り分けの手順はブルースクリーンのエラーが毎回違うときの記事にまとめています)。
問題は最後の2件です。表の読み分けに当てはめると「両方0=記録する間もなく止まった」になりますが、実際はそうではありませんでした。
部品交換の直後に出る41は、クラッシュではないことがある
最後の2件は、どちらもメモリを抜き差しする作業の直後の起動で記録されていました。値には、ほかの22件にない特徴が2つあります。
- SleepInProgress(表の Sleep)が 6
- BootAppStatus(表の BootApp)が 0xC00000D4
そして同じ起動の数秒前に、Kernel-Boot のイベント 29 が記録されていました。
Get-WinEvent -FilterHashtable @{LogName="System"; ProviderName="Microsoft-Windows-Kernel-Boot"; Id=29} -ErrorAction SilentlyContinue |
Select-Object TimeCreated, Message
TimeCreated Message
----------- -------
2026/09/13 20:38:37 Windows failed fast startup with error status 0xC00000D4.
2026/09/11 16:02:55 Windows failed fast startup with error status 0xC00000D4.
「高速スタートアップに失敗した」という記録で、エラーの値は BootAppStatus と同じ 0xC00000D4 です。ログに残っている範囲でこのイベントはこの2件だけで、メモリを交換した2回とぴったり一致していました。
高速スタートアップとは
Microsoft の説明では、高速スタートアップが有効な状態でシャットダウンすると、ユーザーのセッションは閉じますが、カーネルとドライバーの状態は閉じずに休止状態ファイル(hiberfil.sys)へ保存されます。次の起動ではそれを読み込むことで、起動を速くしています。高速スタートアップは既定で有効です。
つまり「シャットダウン」したつもりでも、Windows の中核部分は休止状態に近い形で保存されているということです。その間にメモリを入れ替えると、保存した状態からの復帰が成り立たず、失敗して通常の起動に切り替わった、と読むのが自然です。
SleepInProgress の 6 についても補足します。Windows の電源状態を表す列挙(SYSTEM_POWER_STATE)を先頭から0で数えると、6番目は S5(シャットダウン)にあたります。ただし、Kernel-Power 41 のこの値がその列挙で記録されていると明記した公式の説明は見つけられなかったので、目安として読むにとどめてください。
不具合の経過観察で Kernel-Power 41 を数えているなら、同じ起動で Kernel-Boot 29(高速スタートアップの失敗)が出ている41は、部品交換の記録として外します。筆者の環境では、これを数えてしまうと「メモリを交換した直後にまた落ちた」と誤読するところでした。
部品を交換する前にできること
Microsoft のドキュメントには、高速スタートアップを使わずに完全にシャットダウンする方法として、次のコマンドが載っています。
shutdown /s /t 0
また、再起動には高速スタートアップは使われないとも書かれています。部品を交換するときは、このコマンドで完全にシャットダウンしてから電源ケーブルを抜くのが、仕組みから考えると筋のよい手順です。実行するとすぐに電源が切れるので、作業中のファイルは先に保存してください。
なお、同じドキュメントは高速スタートアップを無効にすることは推奨しないとしています。部品を交換するときだけ完全シャットダウンを使う、という使い分けで十分です。
この手順で交換後の41が記録されなくなるかは、筆者の環境ではまだ確かめていません。次に部品を触るときに確認する予定です。
よくある質問
Kernel-Power 41 が出ていたら、電源ユニットが壊れていますか
それだけでは分かりません。停止コードが入っていれば、まずその停止コードを調べます。両方0が繰り返し出ていて、長押しや停電の心当たりがないなら、電源・メモリ・熱などハードウェア側を順に疑うのが Microsoft の案内です。
停止コードの値が 0x1000007E のように長いのはなぜですか
一般的な資料に載っている 0x7E などと桁が違って見えますが、コマンドは記録された10進数をそのまま16進数に直しているだけです。検索するときは、表示された16進数そのままと、先頭の 0x1000 を除いた形の両方で調べると見つけやすくなります。
高速スタートアップは切った方がいいですか
Microsoft は無効化を推奨していません。部品の交換や、完全に状態をリセットしたいときだけ、上の完全シャットダウンのコマンドか再起動を使えば足ります。
ノートPCで出たときも同じ読み方ですか
同じです。ノートPCでは、バッテリーを外した、または完全に切れたことで両方0になる例が Microsoft のドキュメントに挙がっています。
まとめ
- Kernel-Power 41 は前回きれいに終わらなかったことの記録。原因は中の値で読む
- 停止コードが0以外ならブルースクリーン、電源ボタンの値が0以外なら長押し、両方0なら記録する間もなく止まった
- 停止コードは10進数で入っている。16進数に直してから調べる
- 部品交換の直後は、同じ起動に Kernel-Boot 29(高速スタートアップの失敗)が出ていないかを見る。出ていればクラッシュではない
- 交換の前は
shutdown /s /t 0で完全にシャットダウンしてから電源を抜く
参考リンク
- Microsoft Learn:Event ID 41 The system has rebooted without cleanly shutting down first
- Microsoft Learn:Fast startup causes hibernation or shutdown to fail(高速スタートアップの仕組みと完全シャットダウンのコマンド)
- Microsoft Learn:Delivering a great startup and shutdown experience
- Microsoft Learn:SYSTEM_POWER_STATE 列挙
- メモリは何番のスロットに挿す?2枚・4枚の位置と向き、容量違いを混ぜるときの条件
- ブルースクリーンのエラーが毎回違うときは?原因をメモリまで絞り込む手順
- Antimalware Service Executableが重いまま下がらない原因を特定する方法