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

GetModuleHandle() cannot retrieve handle of "advapi32.dll" loaded by "notepad.exe"

我正在尝试获取由 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.

我还检查了 advapi32.dll 在 notepad.exe 执行期间加载。

谁能告诉我为什么这不起作用?

这是我的环境条件:

Windows 10 专业版 1803(OS 内部版本 17134.165)

这不起作用,因为 GetModuleHandle() ...

Retrieves a module handle for the specified module. The module must have been loaded by the calling process.

GetModuleHandle(), for a DLL in another process 的回答可能对您有所帮助。