[英]How to correctly hook and return GetDlgItemTextA from C++ to C# to C++ from EasyHook
我正在使用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安装程序的工作状态。 这只是套管和钩子而已。
好吧,看来我已经执行了代码,但是唯一的区别是我出于未知原因不得不将try catch语句挂在钩子上。 StringBuilder确实可以正确地从LPCSTR转换回LPCSTR,并且程序可以很好地读取它。 该程序现在不会崩溃,因此我想我将其添加为自己的答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.