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 で開きます。
[ソリューション ‘NameChanger’] を右クリックして [構成マネージャー] をクリックします。
今回は、[アクティブ ソリューション構成] を [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 バイトの空き領域
|
上記の内容が、ファイルシステムミニフィルタドライバを開発される方のお役に立てば幸いです。