C# 您能否使用ETW检测失败的DLL加载?
我正在尝试使用ETW检测失败的库加载。在ProcMon中,我为CreateFile操作设置了一个过滤器,将路径设置为以.dll结尾,并将结果设置为“NAME NOT FOUND”。这捕获应用程序试图访问不存在的DLL的情况 有没有一种方法可以使用ETW实现这一点?我能够捕获成功的库加载,但不能捕获失败的加载 以下是我目前的代码:C# 您能否使用ETW检测失败的DLL加载?,c#,etw,C#,Etw,我正在尝试使用ETW检测失败的库加载。在ProcMon中,我为CreateFile操作设置了一个过滤器,将路径设置为以.dll结尾,并将结果设置为“NAME NOT FOUND”。这捕获应用程序试图访问不存在的DLL的情况 有没有一种方法可以使用ETW实现这一点?我能够捕获成功的库加载,但不能捕获失败的加载 以下是我目前的代码: using(session = new TraceEventSession(sessionName, null)) { session.EnableKernel
using(session = new TraceEventSession(sessionName, null))
{
session.EnableKernelProvider(
KernelTraceEventParser.Keywords.ImageLoad |
KernelTraceEventParser.Keywords.Process,
KernelTraceEventParser.Keywords.None
);
using (TraceLogEventSource traceLogSource = TraceLog.CreateFromTraceEventSession(session))
{
Action<ImageLoadTraceData> PrintEvent = ((ImageLoadTraceData data) => Print(data));
Action<FileIOReadWriteTraceData> PrintFileEvent = ((FileIOReadWriteTraceData data) => PrintFile(data));
traceLogSource.Kernel.ImageLoad += PrintEvent;
timer = new Timer(delegate (object state)
{
if (session != null)
session.Dispose();
session = null;
}, null, monitoringTimeSec * 1000, Timeout.Infinite);
traceLogSource.Process();
}
}
这给了我如下输出:
[*] GoogleUpdate loaded a library!
C:\Windows\SysWOW64\ntmarta.dll
我希望能够捕获加载库的失败尝试。我可以获取每个加载的事件并备份DLL加载顺序(),但这似乎是一种不必要的幼稚方法
[*] GoogleUpdate loaded a library!
C:\Windows\SysWOW64\ntmarta.dll