書き込みのみを処理する単純なフィルター ドライバーを作成しました。フィルターは、IRP_MJ_WRITE のみを登録します。
フィルター ドライバーは、気にしない書き込みを削除します。
- 書き込みの長さが 0 バイトの場合
- リクエスタが KernelMode の場合
- メタデータのファイル名が関心のある特定のファイルと一致する場合
キャプチャしたいのは、実際にディスクに書き込まれるすべての書き込みです。
どの書き込みを気にする必要がありますか?
現在、すべての IRP と FAST_IO をキャプチャしています。ただし、両方をキャプチャすると、重複が発生します。IRP だけをキャプチャすると、FAST_IO だけをキャプチャする場合と同様に、一部のデータが欠落しているように見えます。
http://msdn.microsoft.com/en-us/library/ff548576.aspx (「IRP は高速 I/O とは異なります」)を読みましたが、これは私の経験的データを明確にしませんでした。
私がやろうとしているのは、フィルター ドライバー レベルで "tee" の等価性を実行することです。