【问题标题】:How to correctly hook and return GetDlgItemTextA from C++ to C# to C++ from EasyHook如何正确挂钩并从 EasyHook 返回 GetDlgItemTextA 从 C++ 到 C# 到 C++
【发布时间】:2010-06-12 04:51:45
【问题描述】:

我正在使用 EasyHook,这是一个 C# 库,用于从非托管应用程序中注入和绕行函数。我正在尝试连接GetDlgItemTextA,它接受参数:

UINT WINAPI GetDlgItemText(
  __in   HWND hDlg,
  __in   int nIDDlgItem,
  __out  LPTSTR lpString, 
  __in   int nMaxCount
);`

在我的钩子中,我将其转换为:

[DllImport("user32.dll",
// CharSet = CharSet.Unicode,
SetLastError = true,
CallingConvention = CallingConvention.StdCall)]
static extern uint GetDlgItemTextA(IntPtr hWin, int nIDDlgItem, StringBuilder text, int MaxCount);

我的钩子是:

static uint DGetDlgItemText_Hooked(IntPtr hWin, int nIDDlgItem, StringBuilder text, int MaxCount)
{
    // call original API...
    uint ret = GetDlgItemTextA(hWin, nIDDlgItem, text, MaxCount);
    MessageBox.Show(text.ToString());
    return ret;
}

不幸的是,在调用它的那一刻,被挂钩的应用程序崩溃了。有没有更好的演员可以用来成功挂钩这个功能?谢谢!

我已经编译、编辑并确认了我的 EasyHook 设置的工作条件。这只是套管和挂钩。

【问题讨论】:

    标签: c# hook pinvoke dllimport easyhook


    【解决方案1】:

    好吧,看来我的代码确实有效,但唯一的区别是我不得不在挂钩中放置一个 try catch 语句,原因不明。 StringBuilder 确实正确地从 LPCSTR 转换回 LPCSTR,并且程序读取它就好了。该程序现在没有崩溃,所以我想我会添加这个作为我自己的答案。

    【讨论】:

    • 如果您找到任何适用于 EasyHook 的好的参考/示例,请告诉我。该项目急需一些简单的 c# 示例
    猜你喜欢
    • 2013-11-28
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 2012-01-02
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    相关资源
    最近更新 更多