0

書き込みのみを処理する単純なフィルター ドライバーを作成しました。フィルターは、IRP_MJ_WRITE のみを登録します。

フィルター ドライバーは、気にしない書き込みを削除します。

  • 書き込みの長さが 0 バイトの場合
  • リクエスタが KernelMode の場合
  • メタデータのファイル名が関心のある特定のファイルと一致する場合

キャプチャしたいのは、実際にディスクに書き込まれるすべての書き込みです。

どの書き込みを気にする必要がありますか?

現在、すべての IRP と FAST_IO をキャプチャしています。ただし、両方をキャプチャすると、重複が発生します。IRP だけをキャプチャすると、FAST_IO だけをキャプチャする場合と同様に、一部のデータが欠落しているように見えます。

http://msdn.microsoft.com/en-us/library/ff548576.aspx (「IRP は高速 I/O とは異なります」)を読みましたが、これは私の経験的データを明確にしませんでした。

私がやろうとしているのは、フィルター ドライバー レベルで "tee" の等価性を実行することです。

4

1 に答える 1

2

フィルタ ドライバを通過するパケットと、最終的にディスクに書き込まれるパケットとの関係を誤解していたようです。

ここでの解決策は、ユーザー モードに送信されるパケットにオフセットなどの情報を追加し、結果の書き込みに重複排除検出を適用することです。また、パケットの順序が乱れる可能性もあります。そのため、この状況にも対処するには注意が必要でした。

于 2013-09-18T19:59:38.767 に答える