年末年始は自宅環境の整備をしよう。
10月頃からWindows Updateが失敗するようになり、12月に入って無視できない問題が出てきた。ChatGPTとの共闘により無事勝利したため記録を残しておく。
結論
問題
Win10時代の古いWindows Defenderがロック状態で残っていた。
解決策
Windowsをセーフモードで起動しWindows Defenderのファイルを削除。
その後最新のISOファイルから修復し、Windows Updateを行った。
経緯
2か月ほど前からたまにWindows Updateが失敗し、「変更を元に戻しています」という表示が出る状態になっていた。直ちに問題が発生するわけではなかったし、めんどくさいので放置していた。12月に入ってから同じようにロールバックしたあと、PC起動時に「メモリ不足でエラーが発生した」というウィンドウが出現するようになった。
年末で時間があるので対処しておこうということで重い腰を上げる。
試したこと
以下に試したことを順番に書く
以下ではOSファイルに対して破壊的な操作をしている箇所があります。
参考にする場合にはその操作の内容を確認し、バックアップを取ったうえで実行してください。
メモリチェック
エラー表示からまずメモリ周りの故障を疑った。メモリ価格が暴騰している中不安に思いつつ診断を開始。幸い問題見つからず。
Windows Updateのエラーイベントを探す
Windows Update失敗から派生した問題なのでこちらも確認した。
失敗前提でWindows Update -> ロールバック
イベントビューワーでWindows Updateのエラー(イベントID20)を探す。
こちらも無し
システムファイルスキャン
sfc /scannowコマンドでOS系のファイルが壊れていないか確認する。
エラー c0000242
Windows リソース保護は要求された操作を実行できませんでした。
壊れているらしいが何かまでは分からない
システム修復ツール
このあたりからChatGPTとの共闘を開始したはず。どこに異常があるか分からないためとりあえず修復ツールでの回復を試みている。powershellのコマンドと結果を一部抜粋
DISM /Online /Cleanup-Image /CheckHealth
コンポーネント ストアが壊れていることは検出されませんでした。
DISM /Online /Cleanup-Image /ScanHealth
Error: 605 The specified buffer contains ill-formed data.
The DISM log file can be found at C:\WINDOWS\Logs\DISM\dism.log
DISM /Online /Cleanup-Image /RestoreHealth
Error: 605 The specified buffer contains ill-formed data.
The DISM log file can be found at C:\WINDOWS\Logs\DISM\dism.log
ログはinfoメッセージばかりでエラーは見つからず
古いデバイスドライバ削除
システムファイルスキャン時に上記と別でBluetooth関連のドライバエラーが出ていた。スキャンにはそこそこ時間がかかるのでその間に作業を行った。
Bluetoothは特に問題なく使えていたがとりあえず更新、削除。
変化なし
ISOからの修復
全く解決する気配がないためOS修復を試す。Win11 25H2用のISOをダウンロードしてくる。
通常はダウンロードしたファイルをドライブにマウントするのだが、ダブルクリックや右クリックメニューが出ない。コマンドから実行しようとするもセグフォタイムアウトで失敗。SSDの問題を考慮して別ドライブでも実行するが同様に失敗。
どうやらマウントせずに7zipからいけるようなのでダウンロードしてくる。
7zipから直で解凍しexeを実行することに成功。/source/setup.exeから修復を試みる。
バージョン互換性が無いと出てインストールできない。
このWin11ProはWin11Proじゃない?
winver確認
バージョンをうまく認識できているか確認するために、winverを確認。
確かにWindows11と表示されている。
レジストリ確認
レジストリからもバージョンを確認。
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v CurrentBuild
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildLabEx
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v InstallationType
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion ProductName REG_SZ Windows 10 Pro
OSのビルドバージョンは11系だが名前はWindows10と認識されている。
レジストリ変更後に再起動するとwin10に戻っている。別の箇所を参照して上書きしているらしい。別のレジストリも変更し再起動する。上書きはされないがバージョン互換性の問題は解決せず。
/source/setup.exeからはインストールできなさそうなのでISOフォルダ直下の/setup.exeを実行する。
ロールバックして失敗。バージョン互換性の確認をスキップするオプションを追加して試みるも同様に失敗。
お使いのPCはWindows11のインストールを開始する直前の状態に戻りました。 0x8007042B - 0x4001E PRE_OOBE操作中にエラーが発生したため、インストールはSECOND_BOOTフェーズで失敗しました
修復時のログを確認
C:\$WINDOWS.~BT\Sources\Panther\setuperr.log
Mig::CLibTransport::StoreObject: Failed to store object(1) for File\C:\ProgramData\Microsoft\Windows Defender\Platform\4.18.25030.2-0\MpSvc.dll.
Error: 0x8007025D: class Mig::SideAwareWin32Exception: Mig::CLibrarian::AddObject: Failed to read from source stream. Error: 0x8007025D: 指定したバッファーに誤った形式のデータが含まれています。
ようやく問題の情報が得られた。バージョン互換性のチェックは抜けており、Windows Defenderのファイルでエラーが発生していることを確認。
Windows Defender削除
壊れたWindows Defenderを削除し、正常なものに修復していく。
Windows Defenderは通常の起動モードではファイルがロックされており削除できないらしい。
そのためWindowsをセーフモード+コマンドプロンプトで起動し削除する。
削除後再起動
del /f /s /q "C:\ProgramData\Microsoft\Windows Defender\Platform\*.*"
shutdown /r /t 0
起動後、冒頭のメモリ不足エラーが発生しなくなっていた。
再度ISOからの修復を試す。
成功
レジストリ確認
Windows11と正常に認識されている
システムファイルスキャン
成功
Windows Update
Windows Defenderを含む更新が成功
勝利!
おわりに
1年ほど前に行ったWin10から11へのアップグレード作業時にWindows Defenderのごみを残してしまったのが原因だった。公式で示されている方法では移行できず、追加でBIOS変更なども必要だった記憶がある。その辺で何かしらこけていたのだろう。作業は全体で4~5時間かかった。タイミング的にwin10サポート終了が被っているが、実際に影響があったかは分からない。
今回は7割くらいChatGPTの指示で動いた。Linuxに移行するかーと思うこともあるが、ChatGPTに聞けば解決する程度に情報があふれているのは(Linux系でも問題なくトラブルシュートできるかもしれないが)Windowsの強みだと思う。
この記事を書いている途中でWindows Defenderが2019年にはMicrosoft Defenderに改称されたということを知った。ファイル名とかWindows Defenderのままだし全然知らなかった...
自作PCをやっているとちょこちょこ問題に遭遇する。同じような症状を持つ人がいるか分からないが残しておく。