GetModuleHandle() 无法检索由 "notepad.exe" 加载的"advapi32.dll"的句柄



我正在尝试通过notepad.exe处理文件信息。

因此,我的程序执行以下步骤。

  1. 为notepad.exe 创建进程

    CreateProcess(NULL, szCmdLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);

  2. 等待notepad.exe 初始化完成

    WaitForInputIdle(pi.hProcess, 10000);

  3. 将notepad.exe进程作为调试程序附加到我的程序中。

    DebugActiveProcess(dwPID)

  4. 等待来自Debugee的调试事件。

  5. 当我的程序收到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可能会有所帮助。

最新更新