NTFSの代替データストリームとは
ファイルやフォルダに付けられる付加情報
NTFSの代替データストリーム(Alternate Data Stream。以下ADSと略す)は、ファイルやフォルダと関連付けられ、独立した内容を保持するNTFS上の記憶領域だ。
簡単にいうとNTFS上のファイルやフォルダには、すべてADSと呼ばれる付加情報を一体にして記憶できる。ADSは、NTFS上にある限りファイルと一体で存在し、コピーや移動によって変化することはないが、ファイルを上書きしたり、メモリカードやUSBメモリなどFAT32などのファイルシステムへコピーすると消えてしまう。ADSには、それぞれ名前(ファイル名と同じルール)が付けられる。
同様の機能は、OS/2やNetware、Linuxなどにも見られる。またプラットフォームによって「拡張アトリビュート」、「メタデータ」などさまざまな呼び方がある。
NTFSのADSは、すべての通常ファイル、通常フォルダに追加することが可能だ。また、ADSは1つのファイルに複数追加することもできる。ADSの扱いは基本的にはアプリケーション側に任されており、どのような名前(ただしファイル名と同じルール)を付け、何を保存するのかはまったくの自由だ。見方を変えると、ファイルとは、複数の内容(ストリーム)からできていて、普段は名前のないストリームをアクセスしているといってもいいかもしれない。
ADSは、Windowsが管理のために利用しているが、アプリケーションからも自由に使うことができる。ただし、Windows Explorerには、ADSを表示するなどの機能がなく、標準機能でADSを扱うには、コマンドプロンプトでコマンドを使う必要がある。また、ADSには、ファイルのパス同様、アクセスのための表記方法がある。たとえば、C:\XYZ\ABC.TXTといったファイルがあったとき、sampleという名前のADSは、
C:\XYZ\ABC.TXT:sample
としてパス指定ができる。なお、Windowsは、MS-DOS時代からの慣習でアルファベット1文字と「:」の組合せを常にドライブ文字として認識するため、カレントフォルダのアルファベット1文字のファイル名でADSを指定する場合は、
.\X:sample
としてファイル名であることが判別できるように指定する必要がある。
しかし、このパス表記を受け付けるかどうかはプログラム次第だ。通常のプログラムは、単純にファイルのみをアクセスするため、ADSのパス表記を受け付けないものがほとんどだ。
ただし、コマンドプロンプトでは、ファイルのリダイレクト指定がこの表記を受け付ける。簡単にコマンドラインによる操作を示す。
前記の構文は、ファイルのリダイレトでは確実に受け入れてくれるため、echoやmoreコマンドとファイルのリダイレクトを行なわせて、ファイルを読み書きしている。ただし、ストリームは常にテキストとは限らず、ファイル同様にバイナリデータを含むことも可能である。Dirコマンドの/Rオプションでは、代替データストリームがあれば、それを表示する。
なお、Dirコマンドで表示されるADSの最後についてる「:$DATA」はそのストリームがデータストリームであることを示す代替データストリームの種別である。なお、Windowsは、:$data以外の種別も定義している。このあたりについては、以下のマイクロソフトのドキュメント(英語)を見ていただきたい。
・https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa364404(v=vs.85).aspx
・https://msdn.microsoft.com/en-us/library/dn410405.aspx
インターネットからダウンロードしたデータには
Zone.Identifierという代替データストリームが付く
WindowsによるADSの利用には、インターネットからダウンロードしたファイルのセキュリティ管理がある。これは、ファイルに付けられるADSの名前から「Zone.Identifier」と呼ばれている。IEなどがファイルのダウンロードをした場合に、該当のファイルにADSを付け、ダウンロード元のインターネットゾーン(IEなどのセキュリティ管理範囲)やダウンロード元URLなどの情報を付加するものだ。
ファイルを開こうとすると、インターネットからダウンロードした旨のメッセージが表示されることがあるが、それは、このZone.Identifierの情報を見ているためだ。つまり、インターネットからダウンロードしたファイルには、Zone.Identifierという代替データストリームが付いている。もちろん、NTFS内に置かれていれば、ファイルをコピーしたり移動させても、ADSはそのまま残る。
実際にインターネットからダウンロードしたファイルが持つZone.Identifierとその内容を表示させたのがだ。
このように、Zone.Identifier ADSの中身はテキストファイルで、いくつかの行から構成されている。具体的には、
HostIpAddress:ダウンロード元のホストIPアドレス
ZoneId:インターネットゾーン(3=インターネット)
ReferrerUrl:ダウンロードを開始したページのURL(HTTPリファラ)
HostUrl:ファイルのダウンロードURL
となっている。ただし、ブラウザで「名前を指定して保存」などを使うとReferrerUrlが記録されないことがある。
これを利用すると、過去にダウンロードしたファイルから、ダウンロード元を調べることが可能になる。簡易には、Dir /rでZone.Identifierの有無を確認したあと、
more < ファイル名:Zone.Identifier
でダウンロード元URLを得ることができるが、自動処理を考え、PowerShellを使ってフィルターを作ってみた。Batchでは、ADSの内容を扱うのにはちょっと無理がある。
PowerShellについては、別途解説したいと考えているが、ここでは、ファイルに対応したPowerShellのFileObjectに「HostUrl」と「ReferrerUrl」というプロパティを追加するフィルターを考えた。このようにすることで、いろいろと応用が可能になる。
filter add-zoneidentifier {
$hurl=($_ | get-content -Stream Zone.Identifier -ErrorAction SilentlyContinue | Where-Object {$_ -match "HostUrl="});
$rurl=($_ | get-content -Stream Zone.Identifier -ErrorAction SilentlyContinue | Where-Object {$_ -match "ReferrerUrl="});
if (-not [string]::IsNullOrEmpty($hurl)) {
$_ | Add-Member "HostUrl" $hurl.substring("HostUrl=".length);
}
if (-not [string]::IsNullOrEmpty($rurl)) {
$_ | Add-Member "ReferrerUrl" $rurl.substring("ReferrerUrl=".length);
}
return $_
}
PowerShellのコマンドウィンドウから、
dir *.pdf | add-zoneidentifier | Format-List name,HostUrl,ReferrerUrl
とすれば、カレントディレクトリにあるpdfファイルのHostUrlやReferrerUrlを表示させることが可能だ。
さらに
start microsoft-edge:$((dir ダウンロードファイル名 | add-zoneidentifier).ReferrerUrl)
として、ダウンロードリンクのあるページ(ReferrerUrl)を直接ブラウザ(Edge)で開くことが可能になる(もちろんReferrerUrlが記録されている場合のみ)。また、最後の部分の「ReferrerUrl」を「HostUrl」に変えれば、再ダウンロードやブラウザでの表示ができる。
この連載の記事
-
第456回
PC
あらためてIPv6基本のキ -
第455回
PC
Windowsで現在どのネットワークアダプタがインターネット接続に使われているかを調べる方法 -
第454回
PC
Windows 11 24H2では「デバイスの暗号化」の条件が変わり、より多くのPCでドライブが暗号化される -
第453回
PC
Windows 11 24H2の配布開始後もすぐにはやってこない Windows UpdateとSafeguard Holds -
第452回
PC
Windows 11 Ver.24H2が登場 Copilot+ PCとそうでないPCで実質Windowsが2つに分かれる -
第451回
PC
新しいWindowsサンドボックスではコマンドラインからの制御が可能に -
第450回
PC
ユニコードで文字数を数える方法 -
第449回
PC
WSLはプレビュー版でGUIでの設定が加わった! リリース2.3.xの新機能を見る -
第448回
PC
PowerShellで面倒なオブジェクトはPSCustomObjectに変換するのが早道 -
第447回
PC
この秋登場のWindows 11の新バージョン、Ver.24H2の状況を見る -
第446回
PC
Windows 11のフォトアプリがUWPからWin32アプリになったことで今更わかるUWPの問題点 - この連載の一覧へ