本連載第206回では、Windows 8以降、起動直後に[F8]キーが使えなくなったのは「高速スタートアップ」のせいではなく、「モダンブートメニュー」の導入であることを説明しました。今回は、そのモダンブートメニューでちょっと遊んでみましょう。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
※本稿で使用している「Windows Sysinternals」のユーティリティーはMicrosoftの「Microsoft Docs:Sysinternals」ページから入手できる他、Windows 10やWindows 11の場合はMicrosoft Storeから「Sysinternals Suite」として導入することができます。
「Windows 8」から導入された「モダンブートメニュー」は、マルチブート構成の場合に「オペレーティングシステムの選択」画面を表示します。既定のエントリを選択するか、タイムアウト(既定は30秒)になると、そのまま続行してWindowsのサインイン画面(ロック画面)に進みます(画面1)。
既定とは別のエントリを選択すると、再起動後、選択されたOSが起動してサインイン画面に進みます。マルチブート構成かどうかに関係なく、起動に問題があった場合にユーザーが対処できるようにトラブルシューティングオプションを提供するために表示されることもあります。
「Windows 7」とレガシーブートメニューに設定されたWindows 8以降は、モダンブートメニューではなく、「Windowsブートマネージャー(Bootmgr)」がモダンブートメニューよりも圧倒的に早い段階で、マルチブートシステムでテキストベースのOS選択メニューを表示します。また、マルチブートシステムでない場合は、起動直後に[F8]キーや[F10]キーを使用することでアクセスできます。
本連載第206回でも説明しましたが、タッチデバイスに対応したWindows 8からは、OSの選択やトラブルシューティングのオプション操作にタッチ操作を利用できなければなりません。そのためにOSの起動処理が進んで、後ろの方のタイミングでモダンブートメニューが表示されます。
モダンブートメニューが表示されているときは、既にWindowsブートマネージャーは仕事を終えており、既定のOSの起動に進んでしまっています。そのため、OSの選択メニューで既定のエントリを選択すると、その直後にサインイン画面が表示されます。一方、既定とは別のエントリを選択した場合は、既に起動を開始してしまった既定のOSをいったん終了して再起動する必要があるのです。
モダンブートメニューの実行ファイルは、「C:\Windows\System32\bootim.exe」です。ファイルのプロパティにある説明は「boot immersive menus」です。「Immersive(イマーシブ)」とは「没入型」という意味です。ストアアプリはユニバーサルWindowsプラットフォーム(UWP)アプリとも呼ばれますが、イマーシブアプリやイマーシブプロセスとも呼ばれます。しかし、モダンブートメニューのイマーシブは、イマーシブプロセスとは全く関係ありません。ユーザーモードで動作する、通常のWin32アプリケーションです。
実証してみましょう。コマンドプロンプトを管理者として開き、「bootim.exe」と入力して実行します(画面2)。
すると、全画面表示のモダンブートメニューを表示させることができます(画面3)。
どのメニューを選択しても構いませんが、最終的に終了してコマンドプロンプトに戻ります。モダンブートメニューを表示した状態で、[Alt]+[Tab]キーで別のウィンドウに切り替えることも可能です(画面4)。
なお、この“遊び”を行うと、なぜかカーソルポインターが透明になってしまうので注意してください。起動したモダンブートメニューではカーソルが表示されますが、終了するとカーソルは存在するものの、透明になってしまうのです(この状態を解消するにはWindowsを再起動する必要があります)。
同じことを管理者に昇格しない通常のコマンドプロンプトから実行すると、「PCの電源を切る」だけのモダンブートメニューが表示されます(画面5)。その理由は、管理者権限がなく、「ブート構成データ(BCD)」にアクセスできないからです。
「PCの電源を切る」を含む、どのトラブルシューティングオプションを選択しても、マルチブートシステムで別のOSエントリを選択したとしても、モダンブートメニューが終了して終わります。それは、呼び出したのがコマンドプロンプトであるため、コマンドプロンプトに制御が戻されたともいえます。
実際のOSの起動中に表示されるモダンブートメニューは、別の何者かによって呼び出され、ユーザーの操作(マウスやタッチ操作)の結果を返された何者かが、選択されたものを実行することになります。
モダンブートメニューがどの時点で、何者によって呼び出されたのか、筆者のマルチブート構成のPC(仮想マシン)で調べてみましょう。それには、「Windows Sysinternals」の「Process Monitor(Procmon.exe)」のブートログ機能を利用します。
Procmo.exeを管理者として実行し、「Options」メニューの「Enable Boot Logging」を選択して終了します。その後、Windowsを再起動します。再起動後、再びProcmon.exeを実行すると、起動の初期段階からProcmon.exeを再実行した時点までのプロセスのアクティビティーを参照することができます。「Tools」メニューの「Process Tree」を使用すると、特定のプロセスの開始から終了までのライフタイムを視覚的に参照することができます(画面6)。
「Process Tree」ウィンドウで「bootim.exe」プロセスを探すと、コンソールセッション(セッション1)を準備するために実行された既に終了している「Windowsセッションマネージャー(Smss.exe)」(最初のSmss.exeの2つ目の子プロセス、1つ目はサービス用のセッション0、セッションごとのSmss.exeは仕事を終えるとすぐに終了)が、アプリケーション実行環境であるWindowsサブシステム(Csrss.exe)を開始し、次に「Windowsログオンアプリケーション(Winlogon.exe)」を開始していることが分かります。
そして、この「Winlogon.exe」によって「bootim.exe」が呼び出され、短時間(タイムアウトで進んだ場合は30秒)で終了しています。タイミングはサインイン画面の直前(dwm.exeとLogonUI.exe)です。マルチブート構成でないPCで同様に実験した場合、既定のOSが正常起動する限り、「bootim.exe」プロセスが実行されることはありません。
岩手県花巻市在住。Microsoft MVP 2009 to 2022(Cloud and Datacenter Management)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。Microsoft製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。近著は『Windows版Docker&Windowsコンテナーテクノロジ入門』(日経BP社)、『ITプロフェッショナル向けWindowsトラブル解決 コマンド&テクニック集』(日経BP社)。
Copyright © ITmedia, Inc. All Rights Reserved.