c++ - GetModuleHandle() 无法检索“notepad.exe”加载的“advapi32.dll”句柄
问题描述
我正在尝试获取由 notepad.exe 处理的文件信息。
所以,我的程序执行以下步骤。
为 notepad.exe 创建进程
CreateProcess(NULL, szCmdLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
等到notepad.exe初始化完成
WaitForInputIdle(pi.hProcess, 10000);
将 notepad.exe 进程作为 Debugee 附加到我的程序中。
DebugActiveProcess(dwPID)
等待来自 Debugee 的调试事件。
当我的程序收到
CREATE_PROCESS_DEBUG_EVENT
时,做我需要的事情。
这是我的功能有问题。
LPVOID g_pfHookingAdd = NULL;
BOOL OnCreateProcessDebugEvent(LPDEBUG_EVENT pde)
{
DWORD dwLastErr;
if (NULL == GetModuleHandleA("advapi32.dll")) // Not able to get a handle here.
{
dwLastErr = GetLastError(); // dwLastErr => 126 => (0x7E)
}
g_pfHookingAdd = GetProcAddress(GetModuleHandleA("advapi32.dll"), "IsTextUnicode");
return TRUE;
}
如您所见,我的目标是检索IsTextUnicode()
加载函数的地址。
但是,当我调用 时GetModuleHandleA("advapi32.dll")
,我收到错误代码 126,即
ERROR_MOD_NOT_FOUND
.
我还检查了advapi32.dll
在 notepad.exe 执行期间加载的内容。
谁能告诉我为什么这不起作用?
这是我的环境条件:
Windows 10 专业版 1803(操作系统内部版本 17134.165)
解决方案
这不起作用,因为GetModuleHandle() ...
检索指定模块的模块句柄。该模块必须已由调用进程加载。
对于另一个进程中的 DLL,GetModuleHandle() 的答案可能会对您有所帮助。
推荐阅读
- bash - 如何在bash中打印2个数组值
- python - COLOR_RGB2GRAY 提供非灰度图像(可能是 jupyter-notebook 的问题)
- php - 如何从 mysql 和 php 中的 json 数组中搜索数据?
- ios - iOS中UICollectionView和UICollectionViewCell之间的填充?
- visual-studio-code - 如何使用 vscode 中的 uri 路径在资源管理器视图中打开文件夹
- python - Matplotlib,所有子图的一个颜色条,覆盖在纸张大小上
- android - 浮动按钮需要隐藏在键盘上方
- java - java.sql.DataTruncation:数据截断异常与LIKE运算符关系
- reactjs - TypeError:无法获取未定义或空引用的属性“映射”
- java - 字符串作为 Spring 实体的 Id