我试图获取由notepad.exe处理的文件信息。
因此,我的程序执行以下步骤。
为notepad.exe创建进程
CreateProcess(NULL, szCmdLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
等待直到完成notepad.exe的初始化
WaitForInputIdle(pi.hProcess, 10000);
以Debugee身份将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)
答案 0 :(得分:1)
那是行不通的,因为GetModuleHandle() ...
检索指定模块的模块句柄。该模块必须 已被调用进程加载。
回答GetModuleHandle(), for a DLL in another process可能会对您有所帮助。