gpt4 book ai didi

c# - DLL 加载通知

转载 作者:可可西里 更新时间:2023-11-01 09:28:28 26 4
gpt4 key购买 nike

当系统中的任何进程加载特定 DLL 或所有 DLL 加载事件(我可以过滤掉)时,是否有可能在我的程序中获得通知?就像流程资源管理器如何从所有流程中获取通知一样。为此,我可以使用进程资源管理器,但我想在发生特定 DLL 加载事件时采取操作(显示弹出窗口)。

我也在寻找任何可以为我完成这项工作的开源程序。

非常感谢您。

最佳答案

是的,您可以通过 Windows 的 ETW 获取图像(.dll、.exe)加载事件(Windows 事件跟踪)设施。 ETW 是一种快速、低开销的日志记录机制,大多数 Windows 内核都经过检测以发出事件。

ETW 具有发出事件集的“提供者”的概念。例如,有一个用于 .NET 运行时的 CLR 提供程序、一个用于内存管理器/驱动程序/图像/文件系统/用户事件的内核提供程序、一个用于 HTTP/网络事件的 IIS 提供程序,甚至是第 3 方编写的自定义提供程序。

您需要启用 EVENT_TRACE_FLAG_IMAGE_LOAD在 ETW 内核提供程序上以获得 Image_Load事件。对于托管代码,您可以使用 AssemblyLoad或使用 CLR ETW 提供程序的 ModuleLoad 事件。

您可以从 native 代码和托管代码生成和使用 ETW 事件。使用起来有些困难,但是一旦开始收集数据,就会有大量数据可用。万斯莫里森创造了一个short walkthrough on consuming ETW events via C#并创建了 TraceEvent图书馆。

另外,请参阅我之前的 SO 帖子 herehere有关 ETW 的更多信息。

或者,您可以使用 WMI (Windows Management Instrumentation) 来获取这些事件,尽管您必须轮询它们。与不断枚举系统中所有进程中的所有模块相比,轮询 WMI 仍然应该占用更少的资源。

如果您选择 WMI 路线,请查看 Win32_ModuleLoadTrace and Win32_Process类型。 .NET 框架有一个 reasonable WMI API .

关于c# - DLL 加载通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33131906/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com