繁体   English   中英

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

[英]C++ How to get process ID from filename of DLL(windows)?

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

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

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

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

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

Windows 中的进程 ID 不是静态嵌入在文件中的,它是任何 DLL、EXE 或可执行文件一旦运行时所具有的属性。 检查工具帮助 API,您会在那里找到所有答案。

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

DLL 没有运行,它们是由进程加载的,所以这是不可能的。 但是,您可以通过使用其路径或名称来查找进程的 PID,即。 获取“explorer.exe”的PID

您可以获得已加载特定 DLL 的进程的 PID。 IE。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM