createfileとopenfile以外にファイルハンドルを取得するためのWindows APIはありますか?
質問
アプリケーションが書き込んでいるログ ファイルをスヌープしようとしています。
MSR の迂回ライブラリを使用して createfile を正常にフックしましたが、スヌープしたいファイルで createfile が呼び出されないようです。openfile をフックしても同じ結果が得られました。
私は経験豊富な Windows/C++ プログラマーではない (または経験豊富なプログラマーですら) ので、私の最初の 2 つの考えは、API をフックする前にアプリケーションが createfile を呼び出すか、ファイルの作成/ハンドルを取得するための他の API があるのではないかということでした。 。
編集:2 つの素晴らしい返信をありがとうございました。有益だったので、codingthewheel の返信に賛成票を投じますが、十分な担当者がいません:(
解決
Sysinternal のものを使用できます ファイルモン. 。これは、どのファイル関連システム呼び出しが行われているか、パラメーターとは何かを正確に伝えることができる優れたモニターです。
このアプローチは、API 呼び出しをフックするよりもはるかに簡単で、煩わしさがはるかに少ないと思います。
他のヒント
役に立つかもしれないリンクは次のとおりです。
C# および C++ を使用したゲリラ スタイルのファイル監視
CreateFile APIに触れずにファイルを作成することは可能ですが、聞いてもいいですか? どのような DLL インジェクション方法を使用しているか?Windows フックなどを使用している場合、ターゲット アプリケーションが初期化されるまで DLL はインストールされず、CreateFile への初期の呼び出しを逃すことになります。一方、DetourCreateProcessWithDll などを使用している場合は、アプリケーションの起動コードが実行される前に CreateFile フックをインストールできます。
私の経験では、C および C++ ライブラリ、サードパーティ ライブラリなどを通じて開かれたファイルを含め、作成/開かれたファイルの 99.9% で CreateFile が呼び出されます。おそらく、CreateFile を介してルーティングされない文書化されていない DDK 関数がいくつかあるのかもしれませんが、一般的なログ ファイルの場合、それは疑わしいと思います。
プロセスモニター sysinternals からも役立つかもしれません。