C++ 如何使用MS Detours用自定义函数替换(钩住)Windows函数?

C++ 如何使用MS Detours用自定义函数替换(钩住)Windows函数?,c++,windows,winapi,hook,detours,C++,Windows,Winapi,Hook,Detours,我是一名学生,刚学会如何与Detours女士交往 说明: 我想替换一些用于在窗口内编写和更改文本、标题等的Windows函数,如textowu()函数 TextOut()函数使用当前选定的字体、背景色和文本颜色在指定位置写入字符串 目标: 我的目标是钩住新函数(比如NewTextOutW()),它们将做同样的事情,但它们将用另一种语言翻译文本。新函数的参数与原始函数相同 MS为什么绕道? 我必须使用MS Detours,因为与asm的传统挂钩和覆盖原始函数的热补丁头只适用于X86版本的应用程序,

我是一名学生,刚学会如何与Detours女士交往

说明: 我想替换一些用于在窗口内编写和更改文本、标题等的Windows函数,如
textowu()
函数

TextOut()
函数使用当前选定的字体、背景色和文本颜色在指定位置写入字符串

目标: 我的目标是钩住新函数(比如
NewTextOutW()
),它们将做同样的事情,但它们将用另一种语言翻译文本。新函数的参数与原始函数相同

MS为什么绕道?

我必须使用MS Detours,因为与asm的传统挂钩和覆盖原始函数的热补丁头只适用于X86版本的应用程序,而不适用于X64,因此,由于MS Detours与32位和64位应用程序兼容,我想使用MS Detours

我想挂接函数地址,因为我有源代码,我有原始函数和新函数的地址,保存在
BYTE*
类型的变量中

代码信息: 这是我的代码,它将使用两个地址(
BYTE*m_porifunc
BYTE*m_pDetourFunc
)将一个新函数附加到原始函数

m_porifunc
是原始函数的地址,
m_pDetourFunc
是将附加到原始函数的函数的地址。要分离这两个函数,我使用相同的代码,但除了使用
DetourAttach((PVOID*)和m_porifunc,m_pDetourFunc)
我使用
DetourDetach((PVOID*)和m_porifunc,m_pDetourFunc)
语句

代码:

LONG err_cd = DetourTransactionBegin();

   if (err_cd == NO_ERROR)
   {
      //err_cd = DetourUpdateThread(GetCurrentThread());
      if (err_cd == NO_ERROR)
      {
         err_cd = DetourAttach((PVOID*)&m_pOrigFunc, m_pDetourFunc);
         if (err_cd == NO_ERROR)
         {
            err_cd = DetourTransactionCommit();
            if (err_cd == NO_ERROR)
               ::Trace(2, _T("MSDetours::DetourTransactionCommit: Detour erfolgreich."));
            else
               AbortAndTraceMSDetours("DetourTransactionCommit", err_cd);}
         else
            AbortAndTraceMSDetours("DetourAttach", err_cd);}
      else
         AbortAndTraceMSDetours("DetourUpdateThread", err_cd);}
   else
      AbortAndTraceMSDetours("DetourTransactionBegin", err_cd);
问题: 在实现了这段代码之后,我在其他一些windows函数中遇到了一个错误(我想创建一个框架,但我不确定),您可以看到这个错误 . 对于不会说德语的人,这里有一个文本翻译:

Konfig32.exe中0x6D0A00C8处的未处理异常:0xC000041D: 在用户回调期间遇到未处理的异常

无论是否使用
err_cd=DetourUpdateThread(GetCurrentThread())注释行,错误都会发生语句


有人能帮我找到这个问题的解决办法吗?

请不要用文字图片。另外,这也不是一个完整的例子,我们大多数人都不会说德语,所以我们需要自己复制它。@MSalters,我刚刚添加了上面的翻译:)这与您的?关于,DetourUpdateThread在交互期间更新所有线程,以确保所有截取点都正确更新。问题可能发生在其他地方。。。