我发现了错误,因为我在Windows内置事件查看器中看到了它:
描述:由于未处理的异常,进程终止。 异常信息:System.MissingMethodException 堆: 在Injection.Main.DrawText_Hooked(...)
我有一个使用easyhook的c#应用程序。我的dll关键代码:
public void Run(RemoteHooking.IContext InContext, String InChannelName)
{
// Install system hook to detect calls to DrawTextExW that is made by the client and call the function DrawText_Hooked when ever this happens
try
{
DrawTextExHook = LocalHook.Create(LocalHook.GetProcAddress("user32.dll", "DrawTextExW"), new DDrawTextEx(DrawText_Hooked), this);
DrawTextExHook.ThreadACL.SetExclusiveACL(new Int32[] { 0 });
}....
我处理钩子函数的代表是:
int DrawText_Hooked(...)
{
Interface.Read(hdc, lpString, cchText, dwDTFormat);
return DrawTextExW(hdc, lpString, cchText, ref lprc, dwDTFormat, ref dparams);
}
当我关闭我的主应用程序时,一切正常,除非我使用Interface.Read(...)
:在这种情况下,被钩住的应用程序崩溃。我读过它可能是因为Interface.Read(...)
一旦我退出应用程序就不再存在但我不知道如何告诉我的dll停止这样做或者只是卸载所以它没有尝试Interface.Read(...)
并且发现它不再存在。我该怎么做?
答案 0 :(得分:0)
两天寻找答案,发布后我在10'后自己发现:
我所做的是宣布钩子静态:
static LocalHook DrawTextExHook;
因此,从我的主要代码退出时,我可以调用静态方法将其指向null
,因此停止调用Interface.Read(...)
。
public static void stopIt()
{
DrawTextExHook = null;
}