系统管理、诊断与追踪技术详解
1. DTrace与ETW相关机制
1.1 ETW提供程序实现与DTrace交互
ETW(Event Tracing for Windows)提供程序在DTrace驱动中实现。当Pnp管理器初始化跟踪引擎时,会将所有提供程序注册到DTrace引擎。注册时,ETW提供程序会配置一个名为DTraceLoggingSession的ETW会话,该会话会将事件写入循环缓冲区。
从命令行启动DTrace时,它会向DTrace驱动发送一个IOCTL。IOCTL处理程序会调用每个提供程序的提供函数,内部函数DtEtwpCreate会使用EtwEnumTraceGuidList函数代码调用NtTraceControl API,这使得DTrace能够枚举系统中注册的所有ETW提供程序,并为每个提供程序创建一个探测器。
1.2 D脚本执行与ETW探测器启用
当编译并执行针对ETW提供程序的D脚本时,内部的DtEtwEnable例程会被调用,以启用一个或多个ETW探测器。如果注册时配置的日志会话尚未运行,则会启动该会话。通过跟踪扩展上下文(包含私有系统接口),DTrace能够注册一个内核模式回调,每当在DTrace日志会话中记录新事件时都会调用该回调。
首次启动会话时,没有与之关联的提供程序。与syscall和FBT提供程序类似,DTrace会为每个探测器创建一个跟踪数据结构,并将其插入到表示所有已启用ETW探测器的全局RB树(DtEtwpProbeTree)中。该跟踪数据结构很重要,因为它代表了ETW提供程序与其关联探测器之间的链接。DTrace会计算提供程序的正确启用级别和关键字位掩码,并通过调用NtTraceContro
超级会员免费看
订阅专栏 解锁全文
1万+

被折叠的 条评论
为什么被折叠?



