如何取消注册EasyHook.dll,EasyHook64.dll和EasyLoad64.dll

时间:2018-03-01 10:51:03

标签: c# hook easyhook

我正在使用EasyHook dlls&执行DoDragDrop API挂钩,一切正常,但如何发布以下3个dll

1。EasyHook.dll 2。EasyHook64.dll 3。EasyLoad64.dll

即使关闭我的应用程序后,这些dll仍然挂钩到explorer.exe,一旦我重新启动explorer.exe就会释放它们

到目前为止,我找不到任何解决方案,所以我在这里发布了,请帮我解决这个问题。

以下是我的DLL Run()代码段。

public void Run(RemoteHooking.IContext InContext, String InChannelName)
    {
        try
        {
            dragDropHook = LocalHook.Create(LocalHook.GetProcAddress("Ole32.dll", "DoDragDrop"), new DragDropDelegate(DoDragDropHook), this);

            dragDropHook.ThreadACL.SetExclusiveACL(new Int32[] { 0 });

            File.AppendAllText(logFilePath, "Run : LocalHook Created" + Environment.NewLine);
        }
        catch (Exception ex)
        {
            Interface.ErrorHandle(ex);

            File.AppendAllText(logFilePath, "Run Exception :" + ex.ToString() + Environment.NewLine);

            return;
        }

        Interface.IsInstalled(RemoteHooking.GetCurrentProcessId());

        RemoteHooking.WakeUpProcess();
        File.AppendAllText(logFilePath, "Running " + Environment.NewLine);
        while (checkforDesktopExe())
        {
            Thread.Sleep(1000);
        }

        if (dragDropHook != null)
        {               
            // Remove hooks
            dragDropHook.Dispose();
            // Finalise cleanup of hooks
            LocalHook.Release();
            File.AppendAllText(logFilePath, "Disposed " + Environment.NewLine);
        }
    }

1 个答案:

答案 0 :(得分:0)

您无法卸载托管程序集EasyHook.dll或EasyLoad64.dll,因为它们已加载到默认的.NET AppDomain中,并且据我所知.NET不支持从此处卸载程序集。您的钩子程序集将被卸载,因为EasyLoad为此设置了一个新的AppDomain。

理论上,可以使用Win32 API卸载本机EasyHook64.dll,但是EasyHook.dll托管程序集会使用它,并且我不确定如果尝试重新挂接/注入该怎么办。考虑到无法卸载另外两个我都看不到的东西。