追跡! Windowsに存在する2つの「メモ帳(notepad.exe)」の謎:その知識、ホントに正しい? Windowsにまつわる都市伝説(114)(1/2 ページ)
Windowsの「メモ帳」は「%Windir%\System32\notepad.exe」と「%Windir%\notepad.exe」の2つの場所に存在します。なぜ、タイムスタンプ、日付、ファイルハッシュまでも同一の2つのコピーが存在するのでしょうか。一部では、古くから熱い議論が繰り広げられてきました。なぜ、同じファイルに対するリンクではなく、別のコピーとして存在するのか……。今回は、その謎に迫ります。
2つのメモ帳の存在は、古くからの互換性のため
Windows標準のテキストエディタである「メモ帳」が「%Windir%(通常、C:\Windows)\System32\notepad.exe」と「%Windir%\notepad.exe」の2つの場所に存在することは、Windowsの初期バージョンのころから、そのことに気が付いた一部のユーザーを戸惑わせてきました。マルウェアがこっそり仕込んだ“偽物”と疑うユーザーもいたようです。今でも、そのことを知らないユーザーが、2つ目のメモ帳の存在を発見したときには、同じように不審に思うことでしょう。
メモ帳が2つの場所に存在する理由については、ひと昔前に書かれた以下のブログで説明されています。その理由とは、古いプログラムに対する「互換性」の提供です。
- Why are there two copies of Notepad?(2006年3月28日)[英語](Microsoft Developer - The Old New Thing)
単に古いと言いましたが、それは恐らくメモ帳が初めて登場したときにまでさかのぼります。Windows 3.0では「Windows」ディレクトリに「notepad.exe」が配置されていました(画面1)。
その後、登場したWindows NTの初期バージョンでは「WINNT\System32」ディレクトリに「notepad.exe」が配置されていました。当時、アプリケーションのセットアッププログラムの多くにはメモ帳のパスがハードコードされており、「Readme.txt」の表示に使用されていたそうです。そのようなプログラムがエラーにならないように、「%Windir%\System32」のパスのあるWindowsでは「%Windir%」と「%Windir%\System32」の2つの場所に配置されることが決まりました。
つまり、前者はWindows 95向けに書かれたプログラム、後者はWindows NT向けに書かれたプログラムのためのものです。その結果、Windows 95/98/Millennium Edition(Me)では「%Windir%」のみに配置されていましたが、Windows NT 4.0では2つの場所に配置されました。その後のWindowsでは、引き続き2つの場所に配置されています。
このブログには85個のコメントが付いており、1年以上にわたって熱い議論が行われていました。主な論点は「なぜ、同じファイルを二重で持つという非効率的な方法をとっているのか」ということです。答えは単純なことなのですが、その前に現在に戻りましょう。
2つのメモ帳、同じであって、同じではない?
Windowsのシステムファイルやデバイスドライバの多くは、通常「%Windir%\System32」ディレクトリや「%Windir%\System32\Drivers」ディレクトリに配置されます。しかし、実際にはファイルがパスにコピーされるのではなく、「%Windir%\WinSxS」ディレクトリの配下に格納されているバイナリファイルを参照する「ハードリンク」として存在しています。
例えば、Windowsカーネルである「C:\Windows\System32\ntoskrnl.exe」は、「C:\Windows\WinSxS\amd64_microsoft-windows-os-kernel_31bf3856ad364e35_10.0.16299.402_none_79e5608c1ecd7cc0\ntoskrnl.exe」を参照するハードリンクといった具合です。
ハードリンクは、ローカルボリューム上の1つのファイルに対する、複数のパスによる参照を可能にします。どのパスが本物という区別はありません。参照数が0になれば、そのファイルはボリューム上から削除されます。
Windows標準の「fsutil hardlink list <ファイルのパス>」コマンドや、Windows Sysinternalsの「FindLinks」ツールを使うと、ハードリンクを確認することができます。ハードリンクと似たものに「シンボリックリンク」がありますが、こちらはファイルやディレクトリを参照するショートカットのようなものです。シンボリックリンクは絶対パスだけでなく、相対パスでの指定も可能で、ボリュームやネットワークをまたがることもできます。
Windowsがシステムファイルの配置にハードリンクを多用しているのは、Windows Vistaから導入された「CBS(Component-Based Servicing)」と呼ばれるアーキテクチャに関係しています。Windows XP以前は、Windowsの機能を追加する際にインストールメディアを要求されますが、Windows Vista以降は要求されなくなりました。その理由は「%Windir%\WinSxS」に、ほとんどのコンポーネントのバイナリが格納されているからです。
また、セキュリティ更新やその他の品質更新プログラムによる新バージョンは「%Windir%\WinSxS」に格納され、「%Windir%\System32」などにあるシステムファイルは、新しいバージョンに対するハードリンクに付け替えられます。
「%Windir%\WinSxS」には複数のバージョンが維持されており、更新プログラムのアンインストール時にハードリンクを古いバージョンに付け替えることで、以前のシステムファイルに戻すことができるようになっています。気になるのは、度重なる更新による「%Windir%\WinSxS」の肥大化ですが、それは自動メンテナンスタスクまたは手動によるクリーンアップで最適化できます。
この前提を踏まえた上で、Windows 10のメモ帳(notepad.exe)を調べてみましょう。メモ帳は、前述のように「%Windir%」と「%Windir%\System32」の2つの場所に配置されています。Windows 10 x86には32bit版のメモ帳が、Windows 10 x64には64bit版のメモ帳が、これらの場所に配置されています。Windows 10 x64の場合、さらに「%Windir%\SysWOW64」に32bit版のメモ帳が配置されています(WOW64上で動作します)。
スタートメニューのショートカットからの起動、「ファイル名を指定して実行」からの起動、ファイルの関連付け(.txt)によるエクスプローラーからの起動の際には、「%Windir%\System32」のメモ帳が起動します。その他の場所のメモ帳は、現在のディレクトリ(カレントディレクトリ)との関係、あるいは明示的なパス指定で起動されることがあります。
それでは、2つのメモ帳のパスに設定されているハードリンクの参照先を調べてみましょう。コマンドプロンプトで以下のコマンドラインを実行します。
fsutil hardlink list %Windir%\System32\notepad.exe
fsutil hardlink list %Windir%\notepad.exe
すると、「%Windir%\WinSxS」ディレクトリの別のバイナリファイルにリンクされていることが判明しました(画面2)。
画面2 Windows 10 バージョン1709のメモ帳のハードリンク。2つの場所にある「notepad.exe」は、「%Windir%\WinSxS」ディレクトリの別のファイルにリンクしている。内容は同じファイルだが、これらは別々のファイル
「%Windir%\WinSxS」ディレクトリの別のサブディレクトリにある2つの「notepad.exe」は、同じバージョン情報、同じファイルサイズ、同じタイムスタンプ、同じデジタル署名、同じファイルハッシュ、同じセキュリティ設定(アクセス制御リスト)を持つ、全く同じ内容の実行可能ファイルです。違いがあるとすれば、一方のサブディレクトリ(%Windir%\System32\notepad.exeがリンクしている方)には、「Notepad.lnk」というショートカットファイルが存在することだけです。これは、「notepad.exe」の違いを示すものではありません。何かおかしな感じがしませんか。
ここでの疑問点は「%Windir%\WinSxS」ディレクトリ内の同じ「notepad.exe」にハードリンクすればよいのに、“なぜ、別々のファイルにリンクしているのか”ということです。Windows全体から見れば微々たるものかもしれませんが、無駄にディスクを消費していることになります。ほんの240KB(Windows 10 バージョン1709の64bit版バイナリの場合)程度ですが、「notepad.exe」が新しいバージョンに更新されるごとに、無駄は膨らみます。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 今度はWindows 7のWindows Updateでトラブル──でも、解決策はあります!
2017年12月4日ごろから、Windows 7で「Windows Update」を実行できないというトラブルに遭遇しているユーザーが少なからずいるようです。Microsoftによる公式なアナウンスや回避策は今のところないようですが、取り急ぎ、問題を解消できる可能性がある方法を紹介します。 - 年の初めに再確認、2018年にサポートが終了するMicrosoft製品は?
Microsoftは同社の製品およびサービスについて、明確なサポートポリシー(ただし、途中で変更あり)に基づき、更新プログラムを含むサポートを提供しています。2018年は主に10年前にリリースされた製品がサポート終了を迎えます。どのような製品があるのか、年の初めに再確認し、使用していないかどうかを調べておきましょう。 - Windows 10 Fall Creators Updateがやってきた! 急いでアップグレードするその前に……
Windows 10の最新バージョン「Windows 10 Fall Creators Update バージョン1709(ビルド16299)」がリリースされました。「出勤しようとしたら、突然、アップグレードが始まって困った」「早く帰りたいのにPCの電源を落とせない」なんてことにならないよう、まだ準備ができていない、そして、まだWindows Updateで検出されないのであれば、今が備えるチャンスですよ。 - はじめてのWindows 10入門講座――最新OSとうまく付き合っていく方法
本連載では、Windowsユーザーとしての筆者が、日々遭遇する疑問の調査やトラブル解決を取り上げてきましたが、たびたび深入りし過ぎ、一般ユーザーには余計な情報を提供したかもと反省しています。そこで今回は、はじめてWindows 10に触れるという方に向けて、Windows 10とうまく付き合うヒントを紹介します。