Windows 10 22H2 において、2024年1月にリリースされた更新 KB5034441 が、何度試行しても 0x80070643 エラー で失敗異常終了する現象に遭遇。 WinRE の回復パーティションに十分な空き領域が無いために発生するらしい、このエラーの解消を試みるも…
更新KB5034441の0x80070643エラー
2024年3月初め、仮想マシン内のWindows 10 Pro 22H2のWindows Updateを確認すると、更新に失敗しているKB5034441を発見。再試行を何度実行してもエラーコード 0x80070643 で異常終了します。
この更新プログラムKB5034441は、Windows回復環境WinREの脆弱性CVE-2024-20666に対処するパッチKB5034232を適用するもので、Windows 11ではKB5034440に相当します。
サポートページの中にも述べられている通り、回復パーティションに十分な空き領域が無いとこのエラーコードを吐いて異常終了するのだそう。
WinRE回復パーティションの確認
早速、Windowsアイコン右クリックのメニューより、ディスクの管理をクリックして現在のパーティション構成を確認。
回復パーティションは500MBちょっとあり、そのほぼ全てが空き領域でした。
さらに管理者として実行されたDOSプロンプト上で、WinREの状態も確認しておきます。
1 2 3 4 5 6 7 8 9 10 11 |
C:\WINDOWS\system32>reagentc /info Windows 回復環境 (Windows RE) およびシステム リセット構成 情報: Windows RE の状態: Enabled Windows RE の場所: \\?\GLOBALROOT\device\harddisk0\partition3\Recovery\WindowsRE ブート構成データ (BCD) ID: 404a22bf-aef3-11ea-833c-c61b17836eb4 回復イメージの場所: 回復イメージ インデックス: 0 カスタム イメージの場所: カスタム イメージ インデックス: 0 REAGENTC.EXE: 操作は成功しました。 |
KB5034232を手動適用するスクリプト
この脆弱性に対処するパッチKB5034232を手作業で適用するスクリプトが、KB5034957としてMicrosoftより公開されています。
ページ内の PatchWinREScript_2004plus.ps1 のトグルを開くとスクリプトが現れるので、これを囲んでコピー、テキストエディタにペーストの上、保存します。
次に、上述のページ下方にあるWindows Updateカタログサイトで、 KB5034232 をキーワードに検索、 Version 22H2 for x64 のダウンロードボタンをクリック。
ポップアップウィンドウのリンクより、CABファイルをダウンロードします。
手動適用スクリプトの実行
Powershellコンソールを管理者権限で開き、現在の実行権限が RemoteSigned 以上であることを確認します。
1 2 3 4 |
Windows PowerShell Copyright (C) Microsoft Corporation. All rights reserved. PS C:\WINDOWS\system32> Get-ExecutionPolicy RemoteSigned |
未設定の場合は、以下のコマンドで設定。
1 |
PS C:\WINDOWS\system32> Set-ExecutionPolicy RemoteSigned |
ダウンロードしたPS1スクリプトを実行する際、 -packagePath オプションでCABファイル名を渡すと、長いファイル名の冒頭を打ったところで TAB キーから候補を類推してくれるので便利です。
1 2 3 4 5 |
PS C:\Users\user\Downloads> dir Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2024/03/06 15:21 8673 PatchWinREScript_2004plus.ps1 -a---- 2024/03/06 14:41 7530358 windows10.0-kb5034232-x64_ff4651e9e031bad04f7fa645dc3dee1fe1435f38.cab |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
PS C:\Users\user\Downloads> .\PatchWinREScript_2004plus.ps1 -packagePath .\windows10.0-kb5034232-x64_ff4651e9e031bad04f7fa645dc3dee1fe1435f38.cab 03/06/2024 15:47:44 - No input for mount directory 03/06/2024 15:47:44 - Use default path from temporary directory 03/06/2024 15:47:44 - Working Dir: C:\Users\user\AppData\Local\Temp\ 03/06/2024 15:47:44 - MountDir: C:\Users\user\AppData\Local\Temp\9f8131ee-878f-4525-bf31-e446aac3016a_Mount 03/06/2024 15:47:44 - Mount directory: C:\Users\user\AppData\Local\Temp\9f8131ee-878f-4525-bf31-e446aac3016a_Mount already exists 03/06/2024 15:47:44 - Try to unmount it 展開イメージのサービスと管理ツール バージョン: 10.0.19041.3636 エラー: 50 この要求はサポートされていません。 DISM ログ ファイルは C:\WINDOWS\Logs\DISM\dism.log にあります 03/06/2024 15:47:44 - Warning: unmount failed: 50 03/06/2024 15:47:44 - Delete existing mount direcotry C:\Users\user\AppData\Local\Temp\9f8131ee-878f-4525-bf31-e446aac3016a_Mount 03/06/2024 15:47:44 - Create mount directory C:\Users\user\AppData\Local\Temp\9f8131ee-878f-4525-bf31-e446aac3016a_Mount ディレクトリ: C:\Users\user\AppData\Local\Temp Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2024/03/06 15:47 9f8131ee-878f-4525-bf31-e446aac3016a_Mount 03/06/2024 15:47:44 - Set ACL for mount directory 処理ファイル: C:\Users\user\AppData\Local\Temp\9f8131ee-878f-4525-bf31-e446aac3016a_Mount 1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした 処理ファイル: C:\Users\user\AppData\Local\Temp\9f8131ee-878f-4525-bf31-e446aac3016a_Mount 1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした 処理ファイル: C:\Users\user\AppData\Local\Temp\9f8131ee-878f-4525-bf31-e446aac3016a_Mount 1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした 03/06/2024 15:47:44 - Mount WinRE: REAGENTC.EXE: 操作は成功しました。 03/06/2024 15:48:13 - TargetFile: C:\Users\user\AppData\Local\Temp\9f8131ee-878f-4525-bf31-e446aac3016a_Mount\Windows\System32\winload.efi 03/06/2024 15:48:13 - Target file version: 10.0.19041.1 03/06/2024 15:48:13 - Windows 10, version 2004 03/06/2024 15:48:13 - Apply package:.\windows10.0-kb5034232-x64_ff4651e9e031bad04f7fa645dc3dee1fe1435f38.cab 03/06/2024 15:48:32 - Successfully applied the package 03/06/2024 15:48:32 - Cleanup image 03/06/2024 15:50:22 - Cleanup image succeed 03/06/2024 15:50:22 - TargetFile: C:\Users\user\AppData\Local\Temp\9f8131ee-878f-4525-bf31-e446aac3016a_Mount\Windows\System32\winload.efi 03/06/2024 15:50:22 - Target file version: 10.0.19041.3920 03/06/2024 15:50:22 - Windows 10, version 2004 03/06/2024 15:50:22 - Windows 10, version 2004 with revision 3920 >= 3920, updates have been applied 03/06/2024 15:50:22 - After patch, find expected version for target file 03/06/2024 15:50:22 - Patch succeed, unmount to commit change 展開イメージのサービスと管理ツール バージョン: 10.0.19041.3636 イメージを保存しています [==========================100.0%==========================] イメージのマウントを解除しています [==========================100.0%==========================] 操作は正常に完了しました。 03/06/2024 15:51:07 - Checking BitLocker status 03/06/2024 15:51:07 - Unprotected 03/06/2024 15:51:07 - Bitlocker isn't enabled on the OS この操作を正しく終了しました。 03/06/2024 15:51:07 - Delete mount direcotry |
途中、ネガティブなメッセージにドギマギさせられるも、数分で処理は完走しました。
手動適用後のWindows Update
再びWindows Updateを開き、更新を実行するとまた最後に同じエラーコードを目にするも、よく見るとそれは2023-10のKB5001716の更新エラーでした。
更に履歴を確認すると、KB5034441は成功終了の記録がしっかり残っているので、スクリプトによる手動適用は成功ということに。
そもそも同じKB番号で日付の異なる2つの更新が存在し、1勝1敗という状態は明らかにおかしいと思うので、しばらく様子を見ることにします。
余談)回復パーティションの拡張
ここからは余談。実は上述でKB5034441がまだ残っていると勘違いしてしまい、回復パーティションの手作業による拡大に手を染めました。結果的に意味のない作業ですが、未来の自分へその作業記録をここに残します。
作業の手順は、KB5034441ページに案内されていたKB5028997に記載されています。
管理者権限で開いたDOSプロンプト上で、まずWinREを無効化します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Microsoft Windows [Version 10.0.19045.4123] (c) Microsoft Corporation. All rights reserved. C:\WINDOWS\system32>reagentc /disable REAGENTC.EXE: 操作は成功しました。 C:\WINDOWS\system32>reagentc /info Windows 回復環境 (Windows RE) およびシステム リセット構成 情報: Windows RE の状態: Disabled Windows RE の場所: ブート構成データ (BCD) ID: 00000000-0000-0000-0000-000000000000 回復イメージの場所: 回復イメージ インデックス: 0 カスタム イメージの場所: カスタム イメージ インデックス: 0 REAGENTC.EXE: 操作は成功しました。 |
DiskPartコマンドに入り、ディスク一覧からシステムディスクを選択。システムディスクには右端のGPT欄にフラグが経っていないので、パーティションテーブルはMBR。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
C:\WINDOWS\system32>diskpart Microsoft DiskPart バージョン 10.0.19041.3636 Copyright (C) Microsoft Corporation. コンピューター: VMWIN10X64 DISKPART> list disk ディスク 状態 サイズ 空き ダイナ GPT ### ミック ------------ ------------- ------- ------- --- --- ディスク 0 オンライン 50 GB 0 B ディスク 1 オンライン 10 TB 0 B * DISKPART> sel disk 0 ディスク 0 が選択されました。 |
ディスク内のパーティション一覧から、Windowsシステム(Cドライブ)のパーティションを選択し、サイズを 250MB 削ります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
DISKPART> list part Partition ### Type Size Offset ------------- ------------------ ------- ------- Partition 1 プライマリ 350 MB 1024 KB Partition 2 プライマリ 49 GB 351 MB Partition 3 回復 504 MB 49 GB DISKPART> sel part 3 パーティション 3 が選択されました。 DISKPART> sel part 2 パーティション 2 が選択されました。 DISKPART> shrink desired=250 minimum=250 ボリュームは、次の方法で正常に縮小されました: 250 MB |
続いて回復パーティションを選択して、これを一旦削除。
1 2 3 4 5 6 7 8 9 10 11 |
DISKPART> sel part 3 パーティション 3 が選択されました。 DISKPART> delete partition override DiskPart は選択されたパーティションを正常に削除しました。 DISKPART> list partition Partition ### Type Size Offset ------------- ------------------ ------- ------- Partition 1 プライマリ 350 MB 1024 KB Partition 2 プライマリ 48 GB 351 MB |
次に回復パーティションを作り直すのですが、MBRパーティションなのにGPTのつもりで作成しようとすると、当然エラーになります。
1 2 3 |
DISKPART> create partition primary id=de94bba4-06d1-4d40-a16a-bfd50179d6ac このコマンドに指定した引数は無効です。 このコマンド タイプの詳細については、「HELP CREATE PARTITION PRIMARY」と入力してください。 |
MBRの場合は以下の id で作成します。
1 2 |
DISKPART> create partition primary id=27 DiskPart は指定したパーティションの作成に成功しました。 |
作成したパーティションをフォーマットし、DiskPartを終了します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
DISKPART> format quick fs=ntfs label="Windows RE tools" 100% 完了しました DiskPart は、ボリュームのフォーマットを完了しました。 DISKPART> list vol Volume ### Ltr Label Fs Type Size Status Info ---------- --- ----------- ---- ---------- ------- --------- -------- Volume 0 D DVD-ROM 0 B メディアなし Volume 1 System Rese NTFS Partition 350 MB 正常 システム Volume 2 C NTFS Partition 48 GB 正常 ブート * Volume 4 Windows RE NTFS Partition 754 MB 正常 DISKPART> list partition Partition ### Type Size Offset ------------- ------------------ ------- ------- Partition 1 プライマリ 350 MB 1024 KB Partition 2 プライマリ 48 GB 351 MB * Partition 3 プライマリ 754 MB 49 GB DISKPART> exit DiskPart を終了しています... |
WinREを再び有効にして作業完了です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
C:\WINDOWS\system32>reagentc /enable REAGENTC.EXE: 操作は成功しました。 C:\WINDOWS\system32>reagentc /info Windows 回復環境 (Windows RE) およびシステム リセット構成 情報: Windows RE の状態: Enabled Windows RE の場所: \\?\GLOBALROOT\device\harddisk0\partition2\Recovery\WindowsRE ブート構成データ (BCD) ID: 502fab8d-db94-11ee-8442-3451c9f21492 回復イメージの場所: 回復イメージ インデックス: 0 カスタム イメージの場所: カスタム イメージ インデックス: 0 REAGENTC.EXE: 操作は成功しました。 |
ディスクの管理でも拡張された新しい回復パーティションを、見ることができました。