Windows 11では、2023年6月末以降、毎月の累積的な更新プログラム(Latest Cumulative Update)のタイミングで、可能な場合にWindows回復環境(WinRE)が更新されるようになりました。しかし、WinREのコマンドプロンプトで起動しても、OSビルドは古いままです。いったい何が更新されるのでしょうか。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
以下の連載記事では、「Windows 11」バージョン22H2で2023年6月末から行われた「Windows回復環境(Windows Recovery Environment、WinRE)」の更新方法の変更について説明しました(今回の調査で、同様の方法によるWinREの更新は、Windows 11 バージョン21H2に対しても可能であれば行われることも分かりました)。
従来、WinREはWindowsのインストール時にセットアップされたものが、次のバージョンへのアップグレード時(有効化パッケージを除く)に置き換えられるまで、使用され続けていました。それが、2023年6月の「オプションの更新プログラム」(更新プログラムのプレビュー、Cリリース)から、「累積的な更新プログラム(Latest Cumulative Update、LCU)」のタイミングで更新されるように変更されたのです。
ただし、上記記事でも説明したように、WinREを格納している「回復パーティション」の空き容量に余裕がない場合、WinREが更新されることはありません。そして、Microsoftが公開したドキュメントの説明とは異なり、WinREが更新されなかったとしても、ユーザーに何もエラーメッセージなどは表示されません(後述しますが、ログファイルに記録されます)。WinREは更新されないまま、LCUのインストールは成功の結果を報告します。
WinREがLCUで更新されるかどうかは、WinREを格納している回復パーティションに更新されたWinREを格納するために必要な空き領域が存在するかどうかに依存します。空き領域に余裕があればWinREのイメージ(winre.wim)が更新され、不足している場合は更新されません(画面1)。前掲の記事では、将来のWinREの更新に備えて、回復パーティションのサイズを拡張する方法を説明しています。
画面1の両方のPCで、WinREの「コマンドプロンプト」を起動してみると、「Windowsプレインストール環境(Windows Preinstallation Environment、WinPE)」のOSビルドはどちらも「22621.382」でした。WinREが更新されていない方はそうに違いませんが、WinREが更新された方もOSビルドが変わっていないのには少し驚きました(画面2)。
なお、2023年初めにMicrosoftのガイダンスに従って脆弱(ぜいじゃく)性のあるWinREにオフラインパッチを実施した場合、OSビルドは「22621.819」になっているはずです。
画面1を見ると分かるように、WinREが更新された方のWinREのイメージ(winre.wim)のタイムスタンプやサイズは明らかに異なります。イメージを一時ディレクトリにコピーして、「DISM」コマンドでローカルパスにマウントしてみたところ、「Windows\System32」にある多数のシステムファイル(ntoskrnl.exeなど)や「Windows\System32\Drivers」にある一部のドライバが更新されていることを確認できました(画面3、画面4)。
いずれのシステムファイルやドライバもタイムスタンプは2023年5〜7月(2023年9月のBリリース時点)にかけてのもので、このことがWinPEのOSビルドが変更されない理由になっていると考えます。全て最新のものに置き換えるのではなく、必要なものだけを置き換えているため、OSビルドの情報を変更するわけにはいかないのでしょう。
更新されたシステムファイルのビルド情報(ntoskrnl.exeの10.0.22621.1844など)で検索してみると、以下の「セットアップ動的更新プログラム(Setup Dynamic Update、Microsoft Update)」の情報が見つかりました。
WinREのLCUによる更新は2023年6月末(Cリリース)からなので、時期的に矛盾しませんし、累積的な更新プログラム(以前に更新されたもの+新たに更新されたもの)として、ほぼ毎月リリースされています。そして、更新されたファイルのバージョン情報を知ることもできます。なお、「Microsoft Updateカタログ」ではスタンドアロンパッケージが公開されていますが、.cab形式であるため、簡単にインストールできる類いのものではありません。
Microsoftの公開情報によると、WinREの更新はWindows 11 バージョン22H2だけのように書かれていますが、同時期にWindows 11 バージョン21H2向けにも同様にセットアップ動的更新プログラムがリリースされています。
LCUによってWinREがどのように更新されるのか、少し実験してみました。更新されたWinREのイメージ(winre.wim)が提供され、それが古いイメージと差し替えられているのか、それとも現在のイメージに対する更新なのか、気になったからです。WinREのイメージはOEMやユーザーがカスタマイズ可能なので、おそらく後者の方法だと思います。
Windows 11を新規インストールして、セットアップされたWinREのイメージを一時ディレクトリにコピーし、DISMコマンドでローカルマウント後、更新を加えて(ルートに「demo.txt」を作成しただけ)、イメージをコミットし、WinREとして再登録しました(画面5)。
WinREをカスタマイズした直後に、WinREのコマンドプロンプトを起動して確認すると、「X:\demo.txt」が存在します。このPCを十分な回復パーティション容量を用意してからLCUで更新したところ、「X:\demo.txt」はそのまま、システムファイルが更新されていることを確認できました(画面6)。
「winre.wim」そのものを新しいものに入れ替えず、同じ「winre.wim」をベースに更新されたコンポーネントだけを入れ替えるようになっているのは、(OEMベンダーなどによって)カスタマイズされたWinRE環境の、カスタマイズ部分に影響しないようにするための配慮なのでしょう。WIMファイル内のOSに対するオフラインパッチではなく、個々のコンポーネントの入れ替えになっているのは、WinRMとは関係のないコンポーネントの更新によってWIMファイルのサイズが肥大化することを避ける意図があるのかもしれません。
その一方で、WinREのシステムコンポーネントごとの入れ替えによって、WinRE環境に不具合が生じ、いざというときにWinREの機能不全に遭遇することになる可能性もあるように思えます。
WinREがLCUのタイミングで更新されることを、あらためて確認してみました。
2023年9月のLCU「KB5030219」のダウンロードとインストールが行われている間、「C:\Windows\SoftwareDistribution\Download」下のダウンロード先ディレクトリを参照すると、そこには「KB5030219」のパッケージに加えて、8月のセットアップ動的更新プログラム「KB5029863」がダウンロードされていました(画面7)。
Windowsの「リソースモニター」(pefmon /res)を使用して更新状態を追跡してみると、「C:\$WinREAgent\scratch\mount」ディレクトリにWinREのイメージがローカルマウントされ、更新が加えられている様子を確認できます(画面8)。
リソースモニターによる追跡中、「C:\Windows\Logs\WinREAgent」ディレクトリにあるログファイルへのアクセスの様子を確認できました。WinREが正常に更新されたPCには、その場所にログファイルは存在しませんでした。
一方、回復パーティションの容量不足でWinREが更新されなかったPCで確認したところ、「setupact.log」や「setuperr.log」にエラーの発生やその理由が記録されていました(画面9)。「C:\$WinREAgent」に残された残骸とログを見る限り、「C:\$WinREAgent」下にローカルマウントして更新するまではどのPCでも行われますが、その後、WinREの回復パーティションへの登録時に必要な空き領域がなければ更新前のWinREのイメージにロールバックするという動作をするようです。
岩手県花巻市在住。Microsoft MVP 2008 to 2024(Cloud and Datacenter Management)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。Microsoft製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。近著は『Windows版Docker&Windowsコンテナーテクノロジ入門』(日経BP社)、『ITプロフェッショナル向けWindowsトラブル解決 コマンド&テクニック集』(日経BP社)。
Copyright © ITmedia, Inc. All Rights Reserved.