我需要在基于哪个进程加载它的dll中做一些事情。因此,作为相对新手的Windows编程人员,我需要帮助找出如何找到加载当前dll的exe。到目前为止,我一直在硬编码exe文件名,这是最愚蠢的做法:D
1)有人建议使用
2)在DllMain中这样做是一个好主意吗?我知道DllMain不是做复杂工作的地方。我也明白与加载器锁相关的问题。我所需要的就是找到父进程的名称。
感谢您的时间!
1)有人建议使用
GetModuleFileName()
函数。但是这似乎会使我的应用程序崩溃。(我使用0作为模块句柄)。我什么也没干。我使用了以下语法
GetModuleFileName(0,&fileName,MAX_PATH)
编辑:从{{link1:here}}中我了解到,我无法通过此调用获取.exe名称,因为它仅返回dll名称:(2)在DllMain中这样做是一个好主意吗?我知道DllMain不是做复杂工作的地方。我也明白与加载器锁相关的问题。我所需要的就是找到父进程的名称。
感谢您的时间!
补充说明:我尝试在获取父进程 ID 后使用 GetProcessImageFileName。但是我遇到了访问冲突错误。调试过程中我发现,openProcess 调用会把我的结果参数 (image file path-LPTSTR) 留下一个错误指针。
GetProcessImageFileName 调用返回错误代码 87-INVALID PARAMETER。
但是当前进程 ID 是有效的。
以下是代码:
LPTSTR fileName={0};
HANDLE hP=OpenProcess(PROCESS_QUERY_INFORMATION ,FALSE, processes[i]) ;
GetProcessImageFileName(hP,fileName,(DWORD)MAX_PATH+1);
我做错了什么??
谢谢
重要编辑:
我发现我正在尝试对一个空闲进程使用openprocess。(也就是说)我忘记了我的父进程可能会等待我,因为我同步它。所以现在我得到了一个坏消息,即我无法使用OpenProcess打开一个空闲进程。还有其他方法可以查看空闲进程的对象吗? (我确定它是空闲的,因为我在快照中找不到它。我必须使用enumerateprocess来定位其ID;但是我确实使用正常进程枚举从快照中查找父进程ID)