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 バイトの空き領域

 

 

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

 


Skip to main content