加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 64位全局挂钩锁定32位应用程序

发布时间:2020-12-16 06:56:46 所属栏目:百科 来源:网络整理
导读:我试图创建一个简单的DLL挂钩到Win7 x64上的64位应用程序. 我的程序使用64位进程,每按一次键就会产生一个消息框.但是,当我按下32位应用程序中的任何键时,该应用程序将锁定,直到删除该挂钩.为什么64位挂钩会干扰32位应用程序? 代码如下. hook.h #ifdef MYHOO
我试图创建一个简单的DLL挂钩到Win7 x64上的64位应用程序.

我的程序使用64位进程,每按一次键就会产生一个消息框.但是,当我按下32位应用程序中的任何键时,该应用程序将锁定,直到删除该挂钩.为什么64位挂钩会干扰32位应用程序?

代码如下.

hook.h

#ifdef MYHOOK_EXPORTS
#define MYHOOK_DLL __declspec(dllexport) __stdcall
#else
#define MYHOOK_DLL __declspec(dllimport) __stdcall
#endif

void MYHOOK_DLL installHook();
void MYHOOK_DLL removeHook();

hook.cpp:

#include "hook.h"
#include <windows.h>

// hook handle stored in a shared data segment
#pragma data_seg(".myshared")
HHOOK hhook = 0;
#pragma data_seg()
#pragma comment(linker,"/SECTION:.myshared,RWS")

static HMODULE hmodule = 0;

LRESULT CALLBACK keyboardProc(int code,WPARAM wParam,LPARAM lParam) {
    // Replace this with sending a message to another window or writing to a file
    MessageBox(NULL,L"Hello,world!",L"Alert",0);

    return CallNextHookEx(hhook,code,wParam,lParam);
}

void MYHOOK_DLL installHook() {
    if (!hhook)
        hhook = SetWindowsHookEx(WH_KEYBOARD,keyboardProc,hmodule,0);
}

void MYHOOK_DLL removeHook() {
    if (hhook)
        UnhookWindowsHookEx(hhook);
    hhook = 0;
}

BOOL APIENTRY DllMain(HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved) {

    switch (ul_reason_for_call) {
    case DLL_PROCESS_ATTACH:
        hmodule = hModule;
    }
    return TRUE;
}

install.cpp:

#include "hook.h"
#include <stdio.h>

int wmain() {
    installHook();
    getchar();
    removeHook();

    return 0;
}

我已经读过你应该检查一下你是否处于64位进程中,但是我不确定如何以及在哪里.

我知道WH_KEYBOARD_LL不需要注入DLL,但我试图理解为什么这个钩子不起作用.

解决方法

a)您无法从Hook过程调用MessageBox.不要那样做. b)钩子几乎总是解决任何问题的错误方法.我建议反对他们.你真的想做什么?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读