2008-08-21 6 views
3

特定のプログラム呼び出しのファイルの読み取り/書き込みを追跡できます。実際のトランザクションに関する情報は必要ありません。関連するファイル名だけです。クロスプラットフォームのファイルアクセストラッキング

これにはクロスプラットフォームのソリューションがありますか?
プラットフォーム固有のさまざまな方法は何ですか?
Linuxの場合、strace/ptraceがあることがわかります(より速い方法があれば良いでしょう)。
私はmac osにktraceがあると思います。
Windowsはどうですか?

また、後でファイルアクセスをブロック(ストールアウト)することができれば驚くべきことです。

ありがとうございます!

+0

私はこの質問への回答も探しています。私は(あなたのような)Mac OSでktraceを使うことができると期待していましたが、システムコールが削除されている(隠されている)ようです。あなたはMacでktraceと運があったことがありますか? –

答えて

0

Windowsでは、コマンドラインツールHandleまたはGUIバージョンProcess Explorerを使用して、特定のプロセスが開いているファイルを確認できます。

自分のプログラムでこの情報を取得する場合は、MicrosoftのIFS kitを使用してファイルシステムフィルタを書き込むことができます。ファイルシステムフィルターは、すべてのプロセスのファイルシステム操作をすべて表示します。ファイルシステムフィルタは、AVソフトウェアで開いている前にファイルをスキャンしたり、新しく作成したファイルをスキャンしたりするために使用されます。

1

短い答えはノーです。プラットフォームに特化したソリューションがたくさんありますが、それらはおそらく同様のインタフェースを持っていますが、ファイルシステムはプラットフォーム固有の傾向があるため、本質的にクロスプラットフォームではありません。


私は、各プラットフォーム上でうまくそれをどのように行うのですか?

また、プラットフォームによって異なります:) Windowsの場合、飛行中の読み取り/書き込みを追跡する場合は、IFSを使用する必要があります。変更の通知を受け取りたい場合は、ReadDirectoryChangesWまたはNTFS変更ジャーナルを使用できます。

NTFS変更ジャーナルを使用することをお勧めします。これは、信頼性が高い傾向があるためです。

+1

NTFSはジャーナルレポートを変更して、それぞれのプロセスを変更しますか? –

0

プログラムが監視したいプロセスを起動している間は、デバッガを作成して、プロセスが開始または終了するたびに通知を受け取ることができます。プロセスが開始されると、個々のプロセスごとにCreateFileシステムコールをフックするDLLを注入できます。フックは、パイプまたはソケットを使用してデバッガにファイル活動を報告することができます。

+0

Cからこのフックを行う方法についてのヒントはありますか? –

+0

Google for DLLのホットパッチなど。デバッガプロセスはCreateRemoteThreadをデバッグ中のプロセスに使用して、そのプロセスの一部となる独自のDLLをロードするLoadLibraryを呼び出すことができます。ホットパッチ手法を使用して、システムDLLからほぼすべての関数を呼び出すことができます。 – Emil

関連する問題