我正在尝试通过notepad.exe处理文件信息。
因此,我的程序执行以下步骤。
-
为notepad.exe 创建进程
CreateProcess(NULL, szCmdLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
-
等待notepad.exe 初始化完成
WaitForInputIdle(pi.hProcess, 10000);
-
将notepad.exe进程作为调试程序附加到我的程序中。
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
。
我还检查了在notepad.exe执行期间是否加载了advapi32.dll
。
有人能告诉我为什么这不起作用吗?
以下是我的环境条件:
Windows 10专业版1803(操作系统内部版本17134.165(
这不起作用,因为GetModuleHandle((。。。
检索指定模块的模块句柄。模块必须已由调用进程加载。
GetModuleHandle((的答案,对于另一个进程中的DLL可能会有所帮助。