FC2ブログ

プログラムいろいろ

Win32関係など、プログラム関係のネタをいろいろ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PageTop

IFS初期化

ではIFSの使い方を見てみましょう。

導入はIFSのサンプル(通常は\src\filesys\minifilter)にあるnullfilterを参考にするといいと思います。


ドライバの起動は通常通りDriverEntryから始まります。

ここでサンプルではFltRegisterFilterFltStartFilteringの2つの関数を呼んでいます(IFSでは"Flt"というプレフィックスを持つ関数を主に使用します)。


まず、FltRegisterFilterでフィルタする内容を登録します。
プロトタイプは
NTSTATUS FltRegisterFilter(
IN PDRIVER_OBJECT Driver,
IN CONST FLT_REGISTRATION *Registration,
OUT PFLT_FILTER *RetFilter );
となっています。

引数は順に
・Driver:DriverEntryに渡されるドライバオブジェクトへのポインタ。
・Registration:フィルタドライバの登録内容。
・RetFilter:登録されたフィルタのハンドル。
です。

ここでキモになるのが、第2引数のFLT_REGISTRATION構造体でこの内容がフィルタドライバの性格を決定します。

詳細は後々明らかになって行きますが、とりあえずこのサンプルでサイズ、バージョン以外に設定している項目はNullUnloadとNullQueryTeardownの2関数です。

NullUnloadはFLT_REGISTRATION構造体のFilterUnloadCallbackメンバに設定され、ドライバがアンロードされるときに呼ばれます。

NullQueryTeardownはFLT_REGISTRATION構造体のPFLT_INSTANCE_QUERY_TEARDOWN_CALLBACKメンバに登録され、DDKの本項のヘルプ

The Filter Manager calls this routine to allow the minifilter to respond to a manual detach request. Such a request is received when a user-mode application calls FilterDetach or a kernel-mode component calls FltDetachVolume.

から、FilterDetachとFltDetachVolume関数のコール時、すなわちフィルタ対象のボリュームから切り離されたときに呼ばれるものを思われます。

ちなみに、FilterDetachを初めとする"Filter"をプレフィックスに持つ関数はIFSのユーザモード(アプリケーション)側のAPIとなっているようです。

ということはドライバがアンロードされる時と、ドライバがフィルタ対象から切り離される時に呼ばれる、後処理関数の登録が最低限必要のようですね。

ということで、FltRegisterFilterを使用しフィルタ内容を登録したら、RetFilterに登録したフィルタへのハンドルが戻ってきますので、今後はこのハンドルを使って処理を進めていきます(通常のWin32 APIと同様ですね)。


上記手順でフィルタ内容を登録しても、まだフィルタドライバとしては動作しないようです。
そこで2つめの関数であるFltStartFilteringを使用してフィルタドライバを動作させます。

FltStartFilteringのプロトタイプは
NTSTATU FltStartFiltering(
IN PFLT_FILTER Filter );
となっており、第一引数のFilterにFltRegisterFilterで戻されたフィルタハンドルを設定します。

この2つの関数が正常に終了すれば、めでたくフィルタドライバとしての活動を開始することができます。


後処理用に登録された2関数、NullUnloadとNullQueryTeardownについてはサンプルを見てもらえばすぐにわかると思います。

NullUnloadはフィルタハンドルを解放するだけ、NullQueryTeardownに至っては何もしていません。


次回は動き出したフィルタドライバをボリュームに関連付け、実際にフィルタリングがどう行われるかを見てみましょう。


本記事ははあくまで自分の経験に基づくものであり、確実なものではありません。
使用、転載する場合は自己責任の下でおこなってください。

スポンサーサイト

PageTop

IFSキットのインストール

IFSキットはDDKの拡張機能に位置づけられているようで、DDKと同じインストールフォルダ(Win2K3 SvrならC:\WINDDK\3790.1830)にインストールされる。

ただし、DDKがインストールされている状態でIFSをインストールすることはできず、DDKを一度アンインストールしてからIFSをインストールする必要があるようだ。


なお、ここに載せていることはあくまでも自分の経験に基づくものであり、確実なものではありません。
使用、転載する場合は自己責任の下でおこなってください。

PageTop

IFSことはじめ

IFS(Installable File System)キットとはファイルシステムフィルタドライバをより簡単に作成するキットです。

このキットはDDKとは違い、完全な有償でMSに注文することで入手することができる($109 US)。

IFSカテゴリではこのキットの使い方を乗せていく予定です。

なお、ここに載せていることはあくまでも自分の経験に基づくものであり、確実なものではありません。
使用、転載する場合は自己責任の下でおこなってください。


IFSキットは日本語の技術情報がほとんどないので、このページがIFSを使用する方々の助けになれば幸いです。

PageTop
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。