NameChanger File System Minifilter Driver サンプルを動かしてみる

あるボリューム内で、あるフォルダへのアクセスを別のフォルダにリダイレクトするサンプルをご紹介します。

 

皆さん、こんにちは。WDK サポートチームの津田です。今回は、このようなサンプルとして、NameChanger File System Minifilter Driver ファイル システム ミニ フィルタ ドライバのサンプルを使用します。これを Windows 10 にインストールして、C:\A\B というフォルダへのアクセスが C:\X\Y というフォルダへのアクセスにリダイレクトされるところをお見せしたいと思います。

 

1. サンプルの入手

 

NameChanger File System Minifilter Driver サンプルは、以下のサイトの [Download ZIP] ボタンで Windows-driver-samples-master.zipをダウンロードすると、Windows-driver-samples-master\filesys\miniFilter\NameChanger のフォルダにあります。

 

https://github.com/Microsoft/Windows-driver-samples

 

2. サンプルのビルド

 

このフォルダの NameChanger.sln を、Visual Studio 2015 で開きます。

 

clip_image001

 

[ソリューション ‘NameChanger’] を右クリックして [構成マネージャー] をクリックします。

 

clip_image002

 

今回は、[アクティブ ソリューション構成] を [Debug]、[アクティブ ソリューション プラットフォーム] を[Win32] とします。

 

[ソリューション ‘NameChanger’] を右クリックして [リビルド] をクリックします。\NameChanger\Debug\NameChanger フォルダに以下の 3 つのファイルができます。

 

namechanger.cat

NameChanger.inf

NameChanger.sys

 

3. サンプルのインストールと動作確認の準備

 

上記のファイルを Windows 10 バージョン 1511 x86 の環境にコピーします。例えば、C:\NameChangerというフォルダに置きます。NameChanger.inf を右クリックして [インストール] をクリックすればインストールできます。

 

インストールしても、以下のようにまだこのサンプルドライバはロードされていません。(fltmc.exe の使い方についてご存じない方は、以前の記事「fltmc.exe の使い方」<https://blogs.msdn.microsoft.com/jpwdkblog/2013/02/27/fltmc-exe/> をご参照ください。)

 

>fltmc

 

フィルター名 インスタンス数 階層 フレーム

------------------------------ ------------- ------------ -----

WdFilter 4 328010 0

storqosflt 0 244000 0

FileCrypt 0 141100 0

luafv 1 135000 0

npsvctrig 1 46000 0

FileInfo 4 45000 0

Wof 2 40700 0

 

そこで、以下のコマンドでこのサンプルドライバをロードします。

 

> fltmc load NameChanger

 

これにより、以下のように NameChanger がロードされています。ただ、まだインスタンス数が 0 であることから、ボリュームへのアタッチはされていません。

 

> fltmc

 

フィルター名 インスタンス数 階層 フレーム

------------------------------ ------------- ------------ -----

NameChanger 0 370120 0

WdFilter 4 328010 0

storqosflt 0 244000 0

FileCrypt 0 141100 0

luafv 1 135000 0

npsvctrig 1 46000 0

FileInfo 4 45000 0

Wof 2 40700 0

 

ただ、この状態で C ドライブに以下のようにアタッチしようとしても、エラーします。

 

> fltmc attach namechanger c:

 

次のエラーのため接続できませんでした: 0x801f000f

現時点ではボリュームにフィルターを適用しないでください。

 

このサンプルを動作させるためには、事前に、C ドライブ直下に A\B (A フォルダの下に、B サブフォルダ)、X フォルダを作成します。

dir コマンドで各フォルダの状況をお見せします。

 

// C ドライブ直下

// A フォルダと X フォルダがあります

 

> dir \

ドライブ C のボリューム ラベルがありません。

ボリューム シリアル番号は 7011-E731 です

 

C:\ のディレクトリ

 

2016/02/28 21:12 <DIR> A

(略)

2016/02/28 21:06 <DIR> NameChanger

(略)

2016/02/28 21:12 <DIR> X

               2 個のファイル 34 バイト

               8 個のディレクトリ 34,450,956,288 バイトの空き領域

 

// A フォルダには B サブフォルダがあります

 

> dir \A

ドライブ C のボリューム ラベルがありません。

ボリューム シリアル番号は 7011-E731 です

 

C:\A のディレクトリ

 

2016/02/28 21:12 <DIR> .

2016/02/28 21:12 <DIR> ..

2016/02/28 21:12 <DIR> B

               0 個のファイル 0 バイト

               3 個のディレクトリ 34,450,956,288 バイトの空き領域

 

// X フォルダには何もありません

 

> dir \X

ドライブ C のボリューム ラベルがありません。

ボリューム シリアル番号は 7011-E731 です

 

C:\X のディレクトリ

 

2016/02/28 21:12 <DIR> .

2016/02/28 21:12 <DIR> ..

               0 個のファイル 0 バイト

               2 個のディレクトリ 34,450,956,288 バイトの空き領域

 

上記のフォルダが作成できたら、NameChanger を C ドライブにアタッチします。以下のコマンドを実行すると成功することが確認できます。

 

> fltmc attach namechanger c:

 

ATTACH に成功しました... インスタンス名: NameChanger Instance

 

以下のコマンドを実行することで、インスタンス数も増えており、C ドライブにアタッチできていることもわかります。

 

> fltmc

 

フィルター名 インスタンス数 階層 フレーム

------------------------------ ------------- ------------ -----

NameChanger 1 370120 0

WdFilter 4 328010 0

storqosflt 0 244000 0

FileCrypt 0 141100 0

luafv 1 135000 0

npsvctrig 1 46000 0

FileInfo 4 45000 0

Wof 2 40700 0

 

> fltmc instances

フィルター ボリューム名 階層 インスタンス名 フレーム SprtFtrs Vl 状態

-------------------- ------------------------------------- ------------ ---------------------- ----- -------- --------

FileInfo D: 45000 FileInfo 0 00000003

FileInfo 45000 FileInfo 0 00000003

FileInfo C: 45000 FileInfo 0 00000003

FileInfo \Device\Mup 45000 FileInfo 0 00000003

NameChanger C: 370120 NameChanger Instance 0 00000003

WdFilter D: 328010 WdFilter Instance 0 00000003

WdFilter 328010 WdFilter Instance 0 00000003

WdFilter C: 328010 WdFilter Instance 0 00000003

WdFilter \Device\Mup 328010 WdFilter Instance 0 00000003

Wof 40700 Wof Instance 0 00000003

Wof C: 40700 Wof Instance 0 00000003

luafv C: 135000 luafv 0 00000003

npsvctrig \Device\NamedPipe 46000 npsvctrig 0 00000000

 

 

 

4. サンプルの動作確認

 

以上で準備ができたので、dir コマンドで A フォルダと X フォルダの内容を見てみます。

 

// A フォルダ以下にあった B フォルダがなくなったのがわかります

 

> dir \a

ドライブ C のボリューム ラベルがありません。

ボリューム シリアル番号は 7011-E731 です

 

C:\a のディレクトリ

 

2016/02/28 21:12 <DIR> .

2016/02/28 21:12 <DIR> ..

               0 個のファイル 0 バイト

               2 個のディレクトリ 34,450,956,288 バイトの空き領域

 

// X フォルダの下に Y フォルダが見えるようになりました

 

> dir \x

ドライブ C のボリューム ラベルがありません。

ボリューム シリアル番号は 7011-E731 です

 

C:\x のディレクトリ

 

2016/02/28 21:12 <DIR> .

2016/02/28 21:12 <DIR> ..

2016/02/28 21:12 <DIR> Y

               0 個のファイル 0 バイト

               3 個のディレクトリ 34,450,956,288 バイトの空き領域

 

 

上記の内容が、ファイルシステムミニフィルタドライバを開発される方のお役に立てば幸いです。