GetModuleHandle() 无法检索由 "notepad.exe" 加载的 "advapi32.dll" 的句柄
GetModuleHandle() cannot retrieve handle of "advapi32.dll" loaded by "notepad.exe"
我正在尝试获取由 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
.
我还检查了 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 的回答可能对您有所帮助。
我正在尝试获取由 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
.
我还检查了 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 的回答可能对您有所帮助。