C ++如何从DLL(windows)的文件名中获取进程ID?

时间:2011-07-09 20:46:58

标签: c++ windows multithreading process

如何从文件名中获取进程ID? 喜欢:int processId = getProcessIdByFileName("Network.dll"); 顺便说一下,哪个数据类型有进程ID?

扩展信息: 我有一个DLL的源代码。这个DLL被加载到一个应用程序,就像其他一些DLL一样。我想挂钩其他DLL的功能。因此,我需要它们的进程ID(如果它们都在一个应用程序下运行,那么每个DLL是否有进程ID?

如何在DLL中调用其他DLL的函数?如何处理它们?

4 个答案:

答案 0 :(得分:3)

DLL没有进程ID。 DLL可以加载到多个进程中,或者根本不加载。可以将DLL加载到进程中,稍后卸载,然后再次加载。谈论DLL的进程ID是没有意义的。你究竟想做什么?

答案 1 :(得分:0)

这是不可能的,这就是原因。 DLL在进程之间共享。它可能只有一个“拥有”过程,它可能有很多。您可以确定程序加载了哪些dll(例如依赖性walker)但是您无法确定哪些程序(如果有)附加到DLL。

答案 2 :(得分:0)

Windows中的进程ID并非静态嵌入到文件中,它是任何DLL,EXE或可执行文件运行后的属性。检查Toolhelp API,你会在那里找到所有答案。

要从其他DLL调用函数,您需要动态加载该DLL,请在此处查看示例http://www.codeproject.com/KB/DLL/dynamicdllloading.aspx

答案 3 :(得分:0)

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,只能挂一个进程。