NTFSでは、1つのファイルの中に複数のデータストリームを保存できる。Internet Explorerでは代替データストリーム中にZoneId情報を保存し、インターネットゾーンからダウンロードしたファイルであることが分かるようにしている。Sysinternalsのstreamsコマンドを使うと、代替データストリーム情報の列挙や一括削除ができる。
対象OS:Windows XP/Windows Server 2003/Windows Vista/Windows Server 2008/Windows 7/Windows Server 2008 R2
NTFSファイルシステムでは、1つのファイルに対して複数のデータストリームを割り当てることができる。ストリームとは、バイト単位で可変長となっているデータ格納領域のことであり、一般的なファイルは1つのデータストリーム(メインデータストリームという)しか持っていない。だが場合によっては1つのファイルに対して関連する補助的なデータを持たせたいことがあり、このために利用されるのが代替データストリーム(ADS:Alternate Data Stream)である。関連するデータを複数のファイルに分散して保存すると、それぞれのファイルを常にまとめてコピー/移動したり、作成/削除したりしなければならない。だが1つのファイルに複数のストリームとして格納しておけば、ファイルを1つ処理(コピーや移動)するだけで、関連するデータも自動的に連動して処理されるので便利である。
このマルチデータストリームの利用例としては、初期のWindows Server OSに実装されていたMacintosh向けのファイルサーバ機能がある(Windows Server 2008以降ではサポートされていない)。Macintoshのファイルシステムでは、1つのファイルに「データ フォーク」と「リソース フォーク」という複数のデータを格納しているが、それを2つのストリームに分けて保存していた。
NTFSの代替データストリームを利用する例として、Internet Explorer(以下IE)のZoneId(ゾーンID)機能がある。IEでは、「インターネット ゾーン」」に分類されるサイトからダウンロードしたファイルに対してZoneIdというセキュリティ情報を付加することにより、以後、このファイルに対して特別な扱いを要するファイルであるという印が付けられる(Firefoxなど、他のWebブラウザでもサポートされている)。
ZoneIdが付けられたファイルのプロパティ画面を以下に示す。
実際のZoneIdの内容を確認するには、次のコマンドラインを実行するとよい。
more < <ファイル名>:Zone.Identifier
ZoneIdを持つファイルをエクスプローラから起動しようとすると、次のような確認画面が表示される(Windows Vista/Windows Server 2008以降のUACによってブロックされる場合は、そちらの許可ダイアログが優先される)。
ユーザーはこの画面に対して明示的に許可しない限り、ファイルは実行されない。このようにZoneIdは、インターネットからダウンロードしたファイルに対して注意を喚起する役目を持っている(実行を完全に禁止するわけではない。あくまでも警告するだけである)。
ZoneIdが付いた.ZIPファイルを解凍すると、基本的には解凍された個別のファイルにもZoneIdが継承されるが、解凍方法やWindows OSのバージョンによっては欠落することもあるので、注意が必要である(詳細は先のTIPS参照。Windows 7ではダブルクリックして解凍しても、ZoneIdが維持されるようになっている)。
インターネットゾーンからダウンロードしたファイルに対する起動時の警告メッセージを抑止したければ、ZoneId情報を削除すればよい。そのためには、先ほどのプロパティ画面にある[ブロックの解除]ボタンをクリックする。するとZoneIdが格納されている代替データストリームが削除され、メインデータストリームのみが含まれるファイルになる。
ファイルが複数ある場合は、例えばストリームをサポートしないFATファイルシステムへいったんコピーし、元へ戻すという方法もある(FATへのコピー時にストリームが欠落するので、結果として削除できる)。
だが、いずれの方法もあまり簡単ではない。前者の場合はいちいちプロパティ画面を開いて操作する必要があるし(サブフォルダが存在すると非常に面倒である)、後者は一時的なFATファイルシステムを用意しなければならない。
このような場合は、Sysinternalsから提供されているstreamsコマンドを利用するとよい。これはコマンドプロンプト上で利用するツールであり、代替データストリーム情報の表示や(一括)削除が行える。本TIPSではこのツールの使い方を紹介する。
streams.exeはSysinternalsから提供されている、代替データストリームの操作用コマンドである。代替データストリーム名の列挙と削除ができる。
このWebページからstreams.zipファイルをダウンロードし、解凍して中にあるstreams.exeを適当な実行用フォルダへコピーする。原稿執筆時点での最新版はstreams Ver.1.56(2007/04/27)である。Windows XP/Windows Server 2003以降のWindows OSで利用できる。
streamコマンドにフォルダ名かパス名(ワイルドカード指定も可能)を付けて実行すると、対象となるファイルをスキャンし、代替データストリームを含むファイル名と、代替データストリーム名およびそのデータサイズが表示される。ファイル指定の前に「-s」オプションを付けると、サブフォルダも再帰的にスキャンして該当するファイルが表示される。例えば「streams -s . 」とするとカレントフォルダ以下を全てスキャンする。なお日本語を含むファイル名は正しく表示できないが、ストリーム情報の表示は正しく機能するようである。
F:\Download>streams * ……代替データストリーム情報の表示
Streams v1.56 - Enumerate alternate NTFS data streams
Copyright (C) 1999-2007 Mark Russinovich
Sysinternals - www.sysinternals.com
F:\Download\ApplicationCompatibilityToolkitSetup.exe: ……実行ファイルの例
:Zone.Identifier:$DATA 26 ……ストリーム(ZoneId)
F:\Download\Marvell_Yukon_x64_yk51x64_v11.27.1.3.zip:
:Zone.Identifier:$DATA 26
F:\Download\Microsoft.url: ……URLファイルの例
:favicon:$DATA 3638 ……ストリーム(アイコンキャッシュ)
F:\Download\MSN.url:
:favicon:$DATA 4286
F:\Download\myapp.exe:
:Zone.Identifier:$DATA 26
F:\Download\VirtualChecker.zip:
:Zone.Identifier:$DATA 26
F:\Download\Yahoo.url:
:favicon:$DATA 6598
F:\Download\ZZsamplestream.txt: ……代替データストリームを4つ持つファイルの例
:stream1:$DATA 817 ……ストリーム1
:stream2:$DATA 2228 ……ストリーム2
:stream3:$DATA 6461 ……ストリーム3
:stream4:$DATA 10694 ……ストリーム4
F:\Download>more < myapp.exe:zone.identifier ……ZoneId情報の確認
[ZoneTransfer] ……このような内容が記録されている
ZoneId=3
F:\Download>
ファイル名の次の行に「:Zone.Identifier:$DATA 26」などと表示されているが、これは「Zone.Identifier」という代替データストリームが存在し、そのストリームのデータ長が26bytesである、という意味である。この例では他にも.URLファイル(IEのURLショートカットファイル)に「favicon」という代替データストリームが存在している(リンク先のアイコン情報がキャッシュされている)。ストリーム名の最後にある「:$DATA」はデータストリームタイプを表しているが、これは省略可能である(他にも拡張属性タイプなどがある。
ストリームについては、次のページを参照していただきたい。
メインデータストリーム以外のストリームを削除するには、-dオプションを付けてstreamsコマンドを実行する。
F:\Download>streams -d * ……代替データストリームの全削除
Streams v1.56 - Enumerate alternate NTFS data streams
Copyright (C) 1999-2007 Mark Russinovich
Sysinternals - www.sysinternals.com
F:\Download\ApplicationCompatibilityToolkitSetup.exe:
Deleted :Zone.Identifier:$DATA ……削除された
F:\Download\Marvell_Yukon_x64_yk51x64_v11.27.1.3.zip:
Deleted :Zone.Identifier:$DATA
F:\Download\Microsoft.url:
Deleted :favicon:$DATA
F:\Download\MSN.url:
Deleted :favicon:$DATA
F:\Download\myapp.exe:
Deleted :Zone.Identifier:$DATA
F:\Download\VirtualChecker.zip:
Deleted :Zone.Identifier:$DATA
F:\Download\Yahoo.url:
Deleted :favicon:$DATA
F:\Download\ZZsamplestream.txt:
Deleted :stream1:$DATA ……複数のストリームが削除された
Deleted :stream2:$DATA
Deleted :stream3:$DATA
Deleted :stream4:$DATA
F:\Download>
該当するファイルがスキャンされ、代替データストリームがあれば全て削除される。残念ながら、特定のストリームだけを指定して削除することはできない。サブフォルダ以下をスキャンするには、「-s」オプションを指定する。ただし日本語を含むフォルダ中のファイルは処理されないようなので、cdコマンドを使って手動でフォルダを変更してから処理していただきたい(カレントフォルダにある日本語のファイルについては正しく動作する)。ストリームを削除する権限が不足している場合はエラーが表示されるので、管理者として起動したコマンドプロンプト上で作業を行うこと。
■この記事と関連性の高い別の記事
Copyright© Digital Advantage Corp. All Rights Reserved.