2016-04-10 8 views
1

私は、ファイル拡張子が変更されたときと、どのプロセスがそれらを変更したかを教えてくれるWindowsフックを書きたいと思っています。どのプロセスがファイルの名前を変更したか教えてください。

私が使用することを計画していたアプローチは、私が注入されたDLLから私のメインプログラムに返される情報の2枚が必要トランポリンhttps://en.wikipedia.org/wiki/Trampoline_(computing)

です。
1.その拡張子を持っていたファイルのパスが

すなわちC、それを変えどのようなプロセス 2.変更:/whatever/MyFile.txtはCとなりました:/whatever/MyFile.doc とPID 7344、SomeProgram。 exeは何を変更したのですか?

私が必要とするすべての情報を得るために、注入されたDLLに再ルーティングする必要がある機能はどれですか。

答えて

1

フックNtSetInformationFileは、ファイルの名前を変更するほとんどの方法の「共通の根拠」であるため、フックする必要があります。 FileInformationClassFileRenameInformationかどうかを確認する必要があります。

DLLを呼び出すのは、ファイル名を変更するプロセス内で実行されるため、PIDを取得するのは簡単です(GetCurrentProcessId())。

しかし、ファイルをコピーする(WinAPI関数を使用してファイルをコピーするか、実際に新しいファイルを開いてその内容を書き込むなどして)ファイルを "名前を変更"する方法はまだありません。元の。これは、技術的に名前変更操作がないので、このフックによって捕まえられません。別の、より卑劣なやり方は、新しい名前で同じファイルへのハードリンクを作成し、元のファイルを削除することです。

また、DLLの32ビット版と64ビット版の両方を使用することを検討する必要があります。そうしないと、アプリケーションの半分がレーダーを下回ることになります。

しかし、一般に、特にすべてのプロセスでWindows APIをフックすることは、マイクロソフトからは強く推奨されていますが、セキュリティソフトウェアの問題につながる可能性もあります。あなたのユースケースや、それが特定の問題のための専用ツールであるか、サードパーティにリリースしたいソフトウェアの一部であるかによって、このタスクを達成するためのドライバを構築する価値があるかもしれません。 。

+0

非常に洞察力のある回答ありがとうございます。私はそれを打ちのめしたが、スコアに影響を与えるためには15の評判が必要だと言っている。 私はいくつかの場所でドライバがより良いアプローチであることを読んだ。プロセス監視ドライバの設定方法に関する私が見つけたほとんどのものは、1990年代後半の古い記事でした。 プロセスモニターのように動作する最新の無料のLGPLドライバがどこにあるのですか?少なくとも最新の情報を入手してください。 – JustColorado

関連する問題