2

我正在使用EasyHookdll 并执行DoDragDropAPI 挂钩,一切正常,但如何释放以下 3 个 dll

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

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

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

下面是我的 DLLRun()代码片段。

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);
        }
    }
4

1 回答 1

0

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

理论上,可以使用 Win32 API 卸载本机 EasyHook64.dll,但是 EasyHook.dll 托管程序集使用它,我不确定如果您尝试重新挂钩/注入会发生什么。考虑到不可能卸载其他两个,我无论如何都看不到任何意义。

于 2019-08-02T07:06:43.830 回答