Articles of etw

Windows资源监视器使用哪个API?

Windows资源监视器显示(除其他外)磁盘上的哪些文件当前由哪些进程访问。 而且它是实时的。 怎么样? 我知道它可能使用ETW,我可以用像xperf这样的工具生成痕迹。 但是如何获得实时信息而不必启动,停止和parsing跟踪文件呢? 我需要以编程方式访问数据,即从C#或C ++。

警告 – 无法访问运行wevtutil的提供程序资源

我需要帮助解决“提供者”资源尝试创buildWindows事件提供程序时不可访问我创build我的清单文件与ManGen实用程序,并命名我的.exe文件作为我的消息和资源文件我编译' .rc'文件与我的exe文件和期望的'.res'文件生成。但是,当我运行wevtutil时,我不断收到'资源不可访问'的警告。

使用“Windows事件跟踪”事件

对这个问题的回答让我研究了使用“Windows事件跟踪”来追踪我们的需求。 我遇到了NTrace ,这似乎是从C#代码(使用XP兼容的“经典提供者”模型)生成ETW事件的好方法。 但是,我无法find一个简单的方法来使用这些事件 – 实时查看它们和/或将它们logging到文件中。 我发现的唯一方法是在NTrace文档中描述:使用仅作为Windows DDK的一部分可用的工具。 在现场出现复杂问题的情况下,我们可能需要让用户产生一个包含轨迹的文件。 我们不能要求用户下载DDK或执行一些复杂的操作来完成这个任务。 有没有一种简单的,用户友好的方式将ETW事件logging到文件中? 另外,如果某个人没有以pipe理员身份运行,是否有可能在Windows Vista / 7上使用ETW事件?

如何从Microsoft-Windows-NDIS-PacketCapture提供程序使用实时ETW事件?

更大的问题是如何使用实时ETWnetworking堆栈事件,但我对Microsoft-Windows-NDIS-PacketCapture提供者特别感兴趣。 所有其他networking堆栈提供程序部分工作,但NDIS-PacketCapture(NDIS-PC)根本不工作,所以这可能是我可以问的最简单的问题。 我使用下面的代码作为基础,修改很less,它实时工作: http : //msdn.microsoft.com/en-us/library/windows/desktop/ee441325(v=vs.85)的.aspx 我所做的更改是: 在做任何事情之前,调用StartTrace启动NDIS-PC会话。 在属性struct EVENT_TRACE_PROPERTIES中,设置LogFileMode = EVENT_TRACE_REAL_TIME_MODE,LogFileNameOffset = 0,Wnode.Guid =我制作的随机GUID。 调用状态= EnableTraceEx2(hSession,&Current_Guid,EVENT_CONTROL_CODE_ENABLE_PROVIDER,TRACE_LEVEL_VERBOSE,0,0,0,NULL); 其中hSession是使用StartTrace和Current_Guid开始的会话 {0x2ED6006E,0x4729,0x4609,{0xB4,0x23,0x3E,0xE7,0xBC,0xD6,0x78,0xEF}}; 然后用LoggerName =一些宽string调用OpenTrace,LogFileName = NULL,LogFileMode = EVENT_TRACE_REAL_TIME_MODE; 最后在上面刚刚打开的跟踪句柄上调用ProcessTrace。 同样,将所有其他内容与MSDN示例中提供的相同 使用相同的代码与提供程序的单个更改,如微软Windows Winsock AFD或微软Windows TCPIP 让我调用我定义的loggingcallback(但是,我仍然无法检索属性,但我不会进一步深入,但要保持这个概率尽可能简单)。 当我使用NDIS-PC时,我得到0callback。 我已经尝试使用ControlTrace手动刷新没有任何成功。 我也试着定义“EventCallback”,而不是“EventRecordCallback”,没有成功。 我查看了这个过程中涉及到的所有数据结构,并在每个提供者之间进行了比较,他们看起来都是正确的。 我查看了函数和返回数据结构的所有返回值,而且他们在我尝试的提供者之间看起来也是一样的。 我已经通过调用“logman”My Trace Session 04“-ets”来查看会话属性,它对于NDIS-PC和TCPIP看起来是相同的: C:\ windows \ system32> logman“我的跟踪会话04”-ets 名称:我的跟踪会议04状态: 运行根path:%systemdrive%\ PerfLogs \ Admin Segment: closures时间表:开 名称:我的跟踪会话04 \我的跟踪会话04types: […]

通过事件跟踪(ETW)会话中的特定进程获取创build/修改/删除的文件

我一直在寻找一种解决scheme,通过事件追踪(ETW)会话(我将从一个etl文件而不是实时会话处理数据)中的特定进程来获取所有创build/修改和删除的文件。 显然最简单的解决方法是从FileIo_Name类获取FileCreate和FileDelete事件, 并将它们映射到相应的DiskIo_TypeGroup1事件。 但是,由于我没有收到相应的FileDelete事件的任何DiskIo_TypeGroup1事件,所以此解决scheme对我无效 ,所以无法获取进程ID。 也不是所有的FileCreate事件都有一个关联的DiskIo_TypeGroup1事件(我认为这发生在空的创build文件或仅用于打开的文件)。 注意:我需要DiskIo_TypeGroup1映射,因为FileIo_Name事件没有填充ThreadId和ProcessId成员 – 它们被设置为(ULONG)-1 。 此外,我不能确定哪些文件刚刚打开或修改,而不知道“文件写入大小”。 DiskIo_TypeGroup1也没有在成员中填充ThreadId和ProcessId (在事件头中,在较新的OS上)成员,但它具有IssuingThreadId结构成员,从中我可以获取ProcessId映射到Thread_TypeGroup1类事件。 所以我调查了FileIo_Create类如何帮助我,并指出我可以得到CreateOptions成员可以有以下标志: (FILE_SUPERSEDE,FILE_CREATE,FILE_OPEN,FILE_OPEN_IF,FILE_OVERWRITE,FILE_OVERWRITE_IF) 。 但最初的问题仍然存在。 我怎样才能检查一个文件是否从头开始创build,而不是刚刚打开(例如在FILE_SUPERSEDE的情况下)? 也许我可以使用FileIo_ReadWrite类来获得写事件。 就像使用DiskIo_TypeGroup1类一样。 所以,如果有东西写到一个文件,那么我可以假设这个文件是被创build或修改的? 要find被删除的文件,我认为FileIo_Info类和Delete事件是解决scheme。 猜测我可以接收删除事件并将它们映射到FileIo_Name以获取文件名。 注意: FileIo_Create , FileIo_Info , FileIo_ReadWrite包含有关进程ID的信息。 我的设想是对的吗? 什么将是我的问题的最佳解决scheme?