首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hook SetWindowLongW接口

Hook SetWindowLongW接口
EN

Stack Overflow用户
提问于 2020-01-30 04:20:56
回答 1查看 114关注 0票数 0

这就是我初始化钩子的方式

代码语言:javascript
复制
if (MH_CreateHookApiEx(L"user32", "SetWindowLongW", &MySetWindowLongW, (LPVOID*)&oSetWindowLongW, nullptr) != MH_OK)
    {
        std::cout << "MHook Fail To Install Hook." << std::endl;
        goto exit;
    }
    if (MH_EnableHook(&SetWindowLongW) != MH_OK)
    {
        std::cout << "MHook Fail To Enable Hook." << std::endl;
        goto exit;
    }
代码语言:javascript
复制
typedef LONG(WINAPI* _MySetWindowLongW)(HWND, int, LONG);
_MySetWindowLongW oSetWindowLongW = nullptr;

LONG MySetWindowLongW(
    HWND hWnd,
    int  nIndex,
    LONG dwNewLong
)
{
    return oSetWindowLongW(hWnd, nIndex, dwNewLong);
}

钩子工作了,但问题是在Visual Studio中第一次执行MySetWindowLongW之后,在函数完成后我得到了has triggered a breakpoint.

我想这是Stack或者是通话对话。我真的不知道。

但是我用CreateWindowExW试过了,这是正常的。这个问题只与SetWindowLongW有关。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-30 04:46:13

我不熟悉MinHook,但我了解它的功能。这里有几个暗中猜测:

MySetWindowLongW作为绕道函数传递给MH_CreateHookEx,而不是&MySetWindowLongW。这可能会也可能不会有什么不同。这就是:

代码语言:javascript
复制
if (MH_CreateHookApiEx(L"user32", "SetWindowLongW", MySetWindowLongW, (LPVOID*)&oSetWindowLongW, nullptr) != MH_OK)

声明您的钩子函数并将其定义为stdcall,以与您所挂接的函数的调用约定保持一致

代码语言:javascript
复制
extern "C" LONG WINAPI MySetWindowLongW(
    HWND hWnd,
    int  nIndex,
    LONG dwNewLong) {...}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59974972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档