GetProcAddress(GetModuleHandle(" user32.dll")," DefWindowProcW")返回ntdll中的地址

时间:2015-06-16 14:55:14

标签: c windows winapi user32 ntdll

我使用的是Windows 7 Professional x64。

我需要挂钩DefWindowProcW程序。但是当我尝试通过GetProcAddress()获取地址时,它会返回NtdllDefWindowProcW()的地址,该地址位于ntdll.dll中。在user32开头有一个跳转到真实DefWindowProcW()函数NtdllDefWindowProcW()

有没有办法获得真正的程序地址而不是ntdll程序?

1 个答案:

答案 0 :(得分:2)

这就是所谓的转发导出。该功能在早期版本的Windows中的user32中实现。但在某些时候,微软决定将其转移到ntdll。为了避免破坏应用程序,user32导出转发到ntdll中名为"NtdllDefWindowProc_W"的函数。

ntdll中转发的地址是实际实现该功能的地方。它可能随后调用user32是一个实现细节。因此,如果你想挂钩DefWindowProcW,你可以很好地挂钩你的呼叫返回的地址

GetProcAddress(GetModuleHandle("user32.dll"), "DefWindowProcW")