私はハンドル/フックをつまんでいて、質問があります。今、私は私が再生しているプロセスに注入するDLLを持っています。 DLLは、CloseHandle()関数をフックします。 CloseHandleをが呼び出されると、私は次の操作を行います。ハンドルが開かれている場所を見つける
int WINAPI DetourCloseHandle(HANDLE hObject)
{
OutputDebugStringA("CLOSE HADNLE");
char name[MAX_PATH];
GetFinalPathNameByHandle(hObject, name, MAX_PATH, FILE_NAME_NORMALIZED);
OutputDebugStringA(name);
return oCloseHandle(hObject);
}
この中に私の目標は、ハンドルがに開放され、ハンドルが特定のプロセスに開いている場合は、そのを読み取るためにハンドルを使用場所を把握することです
メモリを処理します。 CloseHandleが呼び出されたときに印刷されるのは、通常、アプリケーションが読み込むランダムファイルへのパスですが、ハンドルが開かれている場所の「名前」として、ランダムなASCII文字が時々印刷されることにも気付きました。 This can be seen here.
場合によっては、特定の.exeファイルへのパスも確認できます。これは珍しいことではありません。私が注入しているアプリケーションはバイナリファイルを読み書きします。私の質問は、 "名前"が、exeファイルへのパスとしてGetFinalPathNameByHandleから返されるのを見ると、ハンドルがバイナリファイル自体に対して開かれているかどうか、またはハンドルファイルが実際の実行プロセスその名前。
また、印刷されているASCII文字が何であるかについていくつかの洞察をしたいと思います。ありがとう!ランダムなデータについては
関数呼び出しが成功したかどうかを確認する必要はないので、おそらく問題のハンドルがファイルハンドルではないために失敗したと考えられ、ランダムデータが何であっても印刷していますバッファーに座っている。 –
あなたはcまたはC++を使用しています – Insane
私はC++ atm – user3749382