首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绕行DrawText

绕行DrawText
EN

Stack Overflow用户
提问于 2009-09-09 17:52:02
回答 2查看 2.5K关注 0票数 2

我已经下载并编译了微软绕行库。在我的项目中,我包含了头文件,并将.lib文件作为依赖项添加。所有的编译都没有错误。现在,我一直试图绕开DrawText,但由于某种原因,这个绕行函数根本没有被调用。类似地,我试着绕行睡眠功能,这起了作用,我绕道而来的功能被称为。

我不太熟悉API编程业务,也不熟悉任何其他低级活动。我怀疑这可能与以下事实有关:我试图在控制台应用程序中执行此操作,而不是在DLL中进行迂回操作。我只是觉得奇怪的是在这种情况下它能绕道睡觉。

我的方法有什么问题吗?还是错误在代码中?

代码语言:javascript
复制
#include <windows.h>
#include <stdio.h>
#include "detours.h"

int ( WINAPI *Real_DrawText )(HDC a0, LPCSTR a1, int a2, LPRECT a3, UINT a4) = DrawTextA;

int Mine_DrawText(HDC hdc, LPCSTR text,  int nCount, LPRECT lpRect, UINT uOptions)
{
   printf("TEST");
   return Real_DrawText(hdc, text, nCount, lpRect, uOptions);
}

int main(int argc, char **argv)
{
    DetourTransactionBegin();
    DetourUpdateThread(GetCurrentThread());
    DetourAttach(&(PVOID&)Real_DrawText, Mine_DrawText);
    DetourTransactionCommit();
    printf("Calling Sleep\n");
    Sleep(1000);
    printf("Second callout");
    Sleep(5000);

    DetourTransactionBegin();
    DetourUpdateThread(GetCurrentThread());
    DetourDetach(&(PVOID&)Real_DrawText, Mine_DrawText);
    DetourTransactionCommit();
    return 0;
}
EN

回答 2

Stack Overflow用户

发布于 2009-09-10 10:55:52

似乎您假设printf()将调用DrawText()。DrawText()是一个GDI函数。printf()转到WriteConsole()。它们不能混在一起。“控制台Windows”与所有其他窗口完全不同。这是一个基本的架构区别;它们甚至由独立的内核组件来管理。

票数 1
EN

Stack Overflow用户

发布于 2009-11-02 08:30:52

只是附带说明:EasyHook - Windows挂钩的重新发明是一个开源(LGPL)项目,开发了绕道的后续项目。它已经相当成熟了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1401081

复制
相关文章

相似问题

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