2011-07-09 40 views
1

ファイル名からプロセスIDを取得するにはどうすればよいですか? Like:int processId = getProcessIdByFileName("Network.dll"); Btw、どのデータ型にプロセスIDがありますか?C++ DLL(ウィンドウ)のファイル名からプロセスIDを取得するには?

拡張情報: 私はDLLのソースコードを持っています。このDLLは、他のいくつかのDLLのようにアプリケーションにロードされます。私は、他のDLLの関数をフックしたい。したがって、それらのプロセスIDが必要です(1つのアプリケーションですべてが実行されている場合、各DLLのプロセスIDはありますか)。

DLL内の他のDLLの機能を呼び出すにはどうすればよいですか? ?

+0

「これらはすべて1つのアプリケーションで動作します」 1つのアプリケーションは1つのプロセスです。したがって、アプリケーション全体の1つのプロセスIDは、ロードされたlibなどではありません。それがアプリケーションでない限り、IPCを使用していますか? –

+0

多くのプロセスIDが存在する可能性があります。 DLLをロードするプロセスごとに1つが存在します。プロセスIDではなくモジュールハンドルを意味するのでしょうか? –

+2

プロセスIDが必要ないことは間違いありませんが、それで何もできません。たぶんモジュールハンドル、GetModuleHandle()を使用します。しかし、「フッキング」が正確であると仮定すれば、Microsoft Detoursが本当に必要になるでしょう。 –

答えて

0

DLLはプロセス間で共有されていますが、所有しているプロセスが1つしかなく、多くのDLLがある可能性があります。プログラムがロードしたDLL(依存関係ウォーカーなど)ただし、DLLに接続されているプログラム(ある場合)を特定することはできません。

+0

しかし、どのDLLを1つのアプリケーションにロードするのか、自分のDLLから1つのDLLをフックできますか?私はすべてのDLLのアプリとアプリケーション自体にロードされているフックを適用したい。 – lolo

+0

@lolo:what ???? –

+0

私はDLLのソースコードを持っています。このDLLは、他のいくつかのDLLのようにアプリケーションにロードされます。私は、他のDLLの関数をフックしたい。私はフックを適用したい - すべてのDLLとアプリケーションは、元の代わりにフック関数を呼び出す必要があります! :) – lolo

3

DLLはプロセスIDを持たないDLLは複数のプロセスにロードすることも、まったくロードすることもできません。プロセス、後でアンロードした後、 dもう一度。 DLLのプロセスIDについて話すことは無意味です。実際に何をしようとしていますか?

+0

自分のDLLからDLLをフックしようとします。両方のDLLが1つのアプリケーションにロードされます。私はすべてのDLLのアプリとアプリケーション自体にロードされているフックを適用したい。 – lolo

0

WindowsのプロセスIDは、ファイル内に統計的に埋め込まれているわけではなく、DLL、EXEまたは実行可能ファイルが実行されているプロパティです。 Check Toolhelp APIを使用すると、すべての回答が見つかります。あなたはDLLがdynamicaly、例えばここでチェックhttp://www.codeproject.com/KB/DLL/dynamicdllloading.aspx

+0

プロセス名のファイル名を検索し、IDのプロセス名を検索してDLLをロードしたかったのです。 – lolo

0

のDLLは、彼らがそのようにこれが不可能なプロセスによってロードされ、実行されていないこと。ロードする必要があり、他のDLLから関数を呼び出すために

ただし、プロセスのPIDはパスまたは名前を使用して検索できます。 "explorer.exe"のPIDを取得

特定のDLLをロードしたプロセスのPIDを取得できます。すなわち、

int PIDs[128]; 
GetDependentProcesses(PIDs, "Kernel32.dll"); //Custom function, not built in 

for(int x = 0; x < 128; x++) 
{ 
    cout << PIDs[x] << " Depends on Kernel32.dll\n"; 
} 

あなたはDLLをフックすることはできません。プロセスのみです。

関連する問題