C++ SetWindowsHookEx-Dll注入在最初的几个调用中丢失

C++ SetWindowsHookEx-Dll注入在最初的几个调用中丢失,c++,winapi,hook,C++,Winapi,Hook,我正在尝试使用SetWindowsHookEx捕获对java.dll中API的调用 因此,我创建了另一个dll,并使用setwindowsHookEx将其注入所有其他进程 g_hHook=SetWindowsHookEx(WH_CALLWNDPROC,JLoadSetFunc,g_hhookdl,0) 问题如下: 在尝试捕获来自某个进程的调用时,我注意到我的dll在对钩住的函数进行了几次调用之后被附加到该进程 所以问题是我的挂钩机制错过了挂钩API的前几个调用 请对这个问题提出建议或评论,以指导

我正在尝试使用SetWindowsHookEx捕获对java.dll中API的调用

因此,我创建了另一个dll,并使用setwindowsHookEx将其注入所有其他进程

g_hHook=SetWindowsHookEx(WH_CALLWNDPROC,JLoadSetFunc,g_hhookdl,0)

问题如下:

在尝试捕获来自某个进程的调用时,我注意到我的dll在对钩住的函数进行了几次调用之后被附加到该进程

所以问题是我的挂钩机制错过了挂钩API的前几个调用

请对这个问题提出建议或评论,以指导我。
我被这个问题难住了。

使用注册表项将DLL加载到每个进程中有一个非常肮脏的黑客:
HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit\U DLL
我建议如下:

  • 使用SetWindowsHookEx()注册钩子
  • 将SendMessage()发送到远程进程,并发送一条只有钩子才能理解的特殊消息
  • 重复这个直到钩子回复
  • 调用希望钩子与之交互的代码
  • 简而言之,在尝试使用钩子之前,请等待钩子安装完成。

    @MSalters

    一点修正:并不是每个进程都使用它——它只加载到导入/使用user32.dll的进程,并不是所有进程都使用它(不过我同意大多数进程都使用它)


    有关详细信息,请参阅。

    只要进程的主线程通过窗口过程接收到消息,就会加载dll。如果在调用要监视的函数后发生这种情况,则会错过一些调用。试一试以上问题有什么解决办法吗?你以前用过ninjectlib吗?它稳定吗?在您引用的几个函数之后是否调用了DllMain?否则,您应该能够在Dll main中钩住/重新写入IAT。在目标进程之后,是否启动了注入Dll的进程?IIRC这在Vista中已被禁用