SetWindowsHookEx没有注入DLL

时间:2014-08-23 15:50:55

标签: c++ windows dll hook inject

我所要做的就是将我的DLL注入其他程序(在进程创建时)并让它执行DllMain函数。 不幸的是,无论我尝试什么代码,它都无法运行。

例如,我有以下代码:http://pastebin.com/P4NzLb3X 基本上它只是使用SetWindowsHookEx来安装键盘钩子。 然而,使用Process Hacker进行检查会向我显示DLL实际上从未被注入到任何进程中。 :(

我已经搜索了整整一天的解决方案。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

我在这两个链接的帮助下解决了这个问题:

http://www.gamedev.net/topic/568401-problem-with-loading-dll--setwindowshookex/

Global Keyhook on 64-Bit Windows

必须修复3件事:

  • 为DLL添加.def文件并使用导出,因为Visual Studio显然喜欢使用extern "C" __declspec(dllexport) int进行奇怪的名称修改 - 这修复了32位进程上的DLL加载
  • CALLBACK属性添加到函数(extern "C" int CALLBACK meconnect(...)) - 这可以修复上述修复后32位进程发生的崩溃。
  • 将一个消息循环添加到主机进程(调用SetWindowsHookEx函数的进程)中,如下所示:

    MSG msg;
    while(1) {
        // Keep pumping...
        PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE);
        TranslateMessage(&msg);
        DispatchMessage(&msg);
        Sleep(10);
        SHORT v = GetKeyState(VK_RETURN);
        bool pressed = (v & 0x8000) != 0;
        if(pressed) 
            break;
    }
    

    这可以修复64位进程中的冻结。