-
-
[原创]ETW机制与InfinityHook的新姿势
-
发表于: 2025-12-31 19:13 1260
-
Windows内核中引入了 Silo(服务隔离对象,Service Isolation Object) 机制,用于实现细粒度资源隔离。Silo 最初在 Windows Server 2019 和 Windows 10 后期版本中逐步引入,并在后续版本(如 Windows 11 和 Windows Server 2022)中进一步完善。
全局变量 PspHostSiloGlobals 指向一个类型为 _ESERVERSILO_GLOBALS 的结构体,描述主操作系统 Silo(即传统 Windows 环境)。其中,PspHostSiloGlobals::EtwSiloState 为描述 ETW 子系统的 Silo。
_ETW_SILODRIVERSTATE 用于记录Silo(Windows 容器/Job 隔离环境)中的 ETW 全局状态,包含该 Silo 内的所有 GUID 注册表、Logger 列表等。
Logger 是一个 ETW tracing session(跟踪会话),负责收集来自一个或多个 Provider 的事件,实现日志的收集与存储。Logger 对象的关键成员为 LoggerId/InstanceGuid/SiloState。其中,LoggerId描述当前 Logger 位于 EtwpLoggerContext 中的索引——EtwpHostSiloStat::EtwpLoggerContext[LoggerId];SiloState 指向当前所属 Silo 对象。
_WMI_LOGGER_CONTEXT 用于记录ETW 日志会话(Logger Session),负责收集事件、管理缓冲区、连接消费者等。
Provider 是事件的来源,通常是驱动程序、内核组件或用户态应用程序,它通过 ETW API 注册自己,并在运行时发出事件。每个 Provider 由一个唯一的 GUID(全局唯一标识符) 标识。
在内核中,驱动程序通常使用 EtwRegister 注册为 Provider,使用 EtwUnregister 注销。
_ETW_GUID_ENTRY 表示一个 Provider GUID 的全局注册信息(如 {69079C8B-...}),包含所有对该 GUID 的注册(即多个 _ETW_REG_ENTRY)。
_ETW_REG_ENTRY 表示 某一会话/进程对某个 GUID 的一次启用(Enable)操作,记录谁启用了、启用级别、回调等,提供 Provider 与 Logger 之间的绑定记录。
全局变量 PspHostSiloGlobals 虽然是未导出函数,但可通过硬编码计算直接获取。

相关函数,如 PsGetServerSiloServiceSessionId、PsGetServerSiloGlobals、PsGetServerSiloActiveConsoleId,可直接在函数硬编码中获取。

PspHostSiloGlobals+0x360/EtwpHostSiloState -> +0x1b0(假设为LoggerContextTable) -> LoggerContextTable[LoggerId] -> _WMI_LOGGER_CONTEXT


PspHostSiloGlobals+0x360(记录与ETW相关数据的指针)与全局变量EtwpHostSiloState一致,这是在 EtwInitializeSiloState 函数中完成赋值的。其中,rdi 指向 _ETW_SILO_STATE 结构体(未导出,暂且如此称呼吧...)。

LoggerContextTable[LoggerId]的相关来源可参见函数 EtwpAcquireLoggerContextByLoggerId,反汇编伪代码如下:
系统调用服务例程的执行位于 KiSystemServiceCopyEnd 函数中,通过 call rax 实现。图示可以看到,在执行系统调用前进行了两次全局标记的判断,即 KiDynamicTraceMask 和 PerfGlobalGroupMask。前者用于动态调试信息记录,而后者用于 ETW 日志记录。

KiDynamicTraceMask__systemcall 代码段内部在“call rax”前后分别调用 KiTrackSystemCallEntry/KiTrackSystemCallExit 进行事件追踪。事实上,这两个函数内部分别调用 PerfInfoLogSysCallEntry/PerfInfoLogSysCallExit 进行 ETW 记录。

类似的,PerfGlobalGroupMask__systemcall 内部采用了同样的策略。

值得注意的是,ETW 的触发依赖于 test dword ptr cs:PerfGlobalGroupMask+8, 40h。
我所参考的 InfinityHook 项目中,ckcl logger context 的定位依赖于 EtwpDebuggerData 特征码扫描定位,而栈帧中存储系统调用服务例程地址的定位依赖于 PerfInfoLogSysCallEntry 函数中的压入栈帧中的 magic。事实上,函数 PerfInfoLogSysCallExit 也同样存在 magic。可以通过两个函数的 magic 差异以判断当前栈帧是 call rax 前/后被触发,可进行定制化的操作。
此外,由于记录 system__call 的 LoggerContext->GetCpuLock 触发路径是固定的,可通过计算调用栈来进行快速定位,以尽可能降低延迟。
path1 (test dword ptr cs:PerfGlobalGroupMask+8, 40h): PerfGlobalGroupMask__systemcall ==> PerfInfoLogSysCallEntry
path2 (test cs:KiDynamicTraceMask, 1): KiDynamicTraceMask__systemcall ==> KiTrackSystemCallEntry ==> PerfInfoLogSysCallEntry
可通过 trap_frame 指针进行快速定位,_kthread::trap_frame 指针指向 trap_frame+0x00,即 PerfGlobalGroupMask__systemcall/KiDynamicTraceMask__systemcall 的栈顶。需要注意的是,如果系统调用参数个数大于4,函数 KiSystemServiceGdiTebAccess 中将会进行栈扩展以复制来自用户态的参数。
etw_hacker 运行截图及其调用栈如下所示:


nt!_ESERVERSILO_GLOBALS +0x000 ObSiloState : _OBP_SILODRIVERSTATE // 对象管理器(Object Manager)的 Silo 状态 +0x2e0 SeSiloState : _SEP_SILOSTATE // 安全子系统(Security Reference Monitor)的 Silo 状态 +0x310 SeRmSiloState : _SEP_RM_LSA_CONNECTION_STATE // LSA(Local Security Authority)连接状态 +0x360 EtwSiloState : 0xffffa908`459c1000 _ETW_SILODRIVERSTATE // ETW +0x368 MiSessionLeaderProcess : 0xffffa908`478ad400 _EPROCESS // 内存管理器(Mm)的会话领导者进程: smss.exe(Session Manager Subsystem) // 作为会话内存配额和页面文件分配的参考点 +0x370 ExpDefaultErrorPortProcess : 0xffffa908`47c424c0 _EPROCESS // 默认硬错误(Hard Error)接收进程: 默认硬错误(Hard Error)接收进程 // csrss.exe 或 svchost.exe (DcomLaunch) // 当应用崩溃时:错误对话框由该进程弹出 +0x378 ExpDefaultErrorPort : 0xffffa908`47593d30 Void // 指向 LPC(Local Procedure Call)端口对象 // 内核通过此端口向 ExpDefaultErrorPortProcess 发送崩溃通知 +0x380 HardErrorState : 1 // 硬错误处理状态 0:禁用硬错误(如无头服务器); 1:启用(桌面系统默认) // 1 → 系统会弹出“xxx 已停止工作”对话框 +0x388 WnfSiloState : _WNF_SILODRIVERSTATE // Windows Notification Facility (WNF) 的 Silo 状态 +0x3c0 DbgkSiloState : _DBGK_SILOSTATE // 内核调试器(Debugging Subsystem)的 Silo 状态 +0x3e0 PsProtectedCurrentDirectory : _UNICODE_STRING "C:\Windows" // 受保护进程(Protected Process Light, PPL)的当前目录 // 防止恶意 DLL 注入到 PPL(如 lsass.exe, MsMpEng.exe) +0x3f0 PsProtectedEnvironment : _UNICODE_STRING "Path=C:\Windows\System32" // 受保护进程的环境变量: 限制 PPL 加载非系统路径的 DLL,提升安全性 +0x400 ApiSetSection : (null) +0x408 ApiSetSchema : (null) +0x410 OneCoreForwardersEnabled : 0 '' // 是否启用 OneCore API 转发(用于通用 Windows 平台) +0x418 NtSystemRoot : _UNICODE_STRING "C:\Windows" // 系统根目录 +0x428 SiloRootDirectoryName : _UNICODE_STRING "" +0x438 Storage : 0xffffa908`45874a00 _PSP_STORAGE // Silo 的私有存储区 +0x440 State : 1 ( SERVERSILO_STARTED ) // Silo 生命周期状态 +0x444 ExitStatus : 0n259 // Silo 退出码 +0x448 DeleteEvent : (null) // Silo 销毁完成事件 +0x450 UserSharedData : 0xffffa908`458742b0 _SILO_USER_SHARED_DATA // 用户模式共享数据区(User-Shared Data)的 Silo 版本 +0x458 UserSharedSection : (null) // 用户共享数据的节对象(Section Object) +0x460 TerminateWorkItem : _WORK_QUEUE_ITEM // Silo 终止时的延迟工作项 nt!_ESERVERSILO_GLOBALS +0x000 ObSiloState : _OBP_SILODRIVERSTATE // 对象管理器(Object Manager)的 Silo 状态 +0x2e0 SeSiloState : _SEP_SILOSTATE // 安全子系统(Security Reference Monitor)的 Silo 状态 +0x310 SeRmSiloState : _SEP_RM_LSA_CONNECTION_STATE // LSA(Local Security Authority)连接状态 +0x360 EtwSiloState : 0xffffa908`459c1000 _ETW_SILODRIVERSTATE // ETW +0x368 MiSessionLeaderProcess : 0xffffa908`478ad400 _EPROCESS // 内存管理器(Mm)的会话领导者进程: smss.exe(Session Manager Subsystem) // 作为会话内存配额和页面文件分配的参考点 +0x370 ExpDefaultErrorPortProcess : 0xffffa908`47c424c0 _EPROCESS // 默认硬错误(Hard Error)接收进程: 默认硬错误(Hard Error)接收进程 // csrss.exe 或 svchost.exe (DcomLaunch) // 当应用崩溃时:错误对话框由该进程弹出 +0x378 ExpDefaultErrorPort : 0xffffa908`47593d30 Void // 指向 LPC(Local Procedure Call)端口对象 // 内核通过此端口向 ExpDefaultErrorPortProcess 发送崩溃通知 +0x380 HardErrorState : 1 // 硬错误处理状态 0:禁用硬错误(如无头服务器); 1:启用(桌面系统默认) // 1 → 系统会弹出“xxx 已停止工作”对话框 +0x388 WnfSiloState : _WNF_SILODRIVERSTATE // Windows Notification Facility (WNF) 的 Silo 状态 +0x3c0 DbgkSiloState : _DBGK_SILOSTATE // 内核调试器(Debugging Subsystem)的 Silo 状态 +0x3e0 PsProtectedCurrentDirectory : _UNICODE_STRING "C:\Windows" // 受保护进程(Protected Process Light, PPL)的当前目录 // 防止恶意 DLL 注入到 PPL(如 lsass.exe, MsMpEng.exe) +0x3f0 PsProtectedEnvironment : _UNICODE_STRING "Path=C:\Windows\System32" // 受保护进程的环境变量: 限制 PPL 加载非系统路径的 DLL,提升安全性 +0x400 ApiSetSection : (null) +0x408 ApiSetSchema : (null) +0x410 OneCoreForwardersEnabled : 0 '' // 是否启用 OneCore API 转发(用于通用 Windows 平台) +0x418 NtSystemRoot : _UNICODE_STRING "C:\Windows" // 系统根目录 +0x428 SiloRootDirectoryName : _UNICODE_STRING "" +0x438 Storage : 0xffffa908`45874a00 _PSP_STORAGE // Silo 的私有存储区 +0x440 State : 1 ( SERVERSILO_STARTED ) // Silo 生命周期状态 +0x444 ExitStatus : 0n259 // Silo 退出码 +0x448 DeleteEvent : (null) // Silo 销毁完成事件 +0x450 UserSharedData : 0xffffa908`458742b0 _SILO_USER_SHARED_DATA // 用户模式共享数据区(User-Shared Data)的 Silo 版本 +0x458 UserSharedSection : (null) // 用户共享数据的节对象(Section Object) +0x460 TerminateWorkItem : _WORK_QUEUE_ITEM // Silo 终止时的延迟工作项 nt!_ETW_SILODRIVERSTATE EtwpHostSiloState +0x000 Silo : Ptr64 _EJOB // 主操作系统 Silo(即非容器、非 Job 隔离的传统 Windows 环境) +0x008 SiloGlobals : 0xfffff800`22a47540 _ESERVERSILO_GLOBALS // 全局内核对象表(如进程、线程、注册表等命名空间), 即 PspHostSiloGlobals +0x010 MaxLoggers : 0x40 // 当前 Silo 允许的最大 ETW Logger 数量 +0x018 EtwpSecurityProviderGuidEntry : _ETW_GUID_ENTRY +0x1a8 EtwpLoggerRundown : 0xffffa908`459c2900 -> 0xffffa908`45850510 _EX_RUNDOWN_REF_CACHE_AWARE // 用于 Logger 引用计数与安全析构 +0x1b0 EtwpLoggerContext : 0xffffa908`459c2b00 -> 0xffffa908`49a4c040 _WMI_LOGGER_CONTEXT // 指向 LoggerTable[LoggerId] +0x1b8 EtwpGuidHashTable : [64] _ETW_HASH_BUCKET // 可通过 hash_table 计算 guid 快速获取 GuidEntry, 例如函数 EtwpFindGuidEntryByGuid +0xfb8 EtwpSecurityLoggers : [8] 3 +0xfc8 EtwpSecurityProviderEnableMask : 0x3 '' +0xfcc EtwpShutdownInProgress : 0n0 // Silo 关闭标志 +0xfd0 EtwpSecurityProviderPID : 0x344 // lsass.exe (Local Security Authority Subsystem Service) 是当前注册安全提供者的进程 // LSASS 负责处理本地安全和登录管理等关键任务 +0xfd8 PrivHandleDemuxTable : _ETW_PRIV_HANDLE_DEMUX_TABLE // 私有句柄多路复用表. 允许用户态通过 OpenTrace 获取 Logger 句柄; 维护句柄到 _WMI_LOGGER_CONTEXT 的映射. +0xff8 EtwpCounters : _ETW_COUNTERS // ETW 性能计数器集合 +0x1008 LogfileBytesWritten : _LARGE_INTEGER 0x17d1800 +0x1010 ProcessorBlocks : 0xffffa908`459c2240 _ETW_SILO_TRACING_BLOCK +0x1018 ContainerRestoreWnfSubscription : 0xffffe283`2a98ac40 _EX_WNF_SUBSCRIPTION +0x1020 PartitionId : _GUID {00000000-0000-0000-0000-000000000000} +0x1030 ParentId : _GUID {00000000-0000-0000-0000-000000000000} +0x1040 QpcOffsetFromRoot : _LARGE_INTEGER 0x0 +0x1048 PartitionType : 0 // Silo 分区类型 // 0: 主系统; 1:WSL2; 2:Windows Server Container; 3: Job Object Isolation. +0x104c SystemLoggerSettings : _ETW_SYSTEM_LOGGER_SETTINGS // 系统级 Logger 全局配置 +0x11c0 EtwpStartTraceMutex : _KMUTANTnt!_ETW_SILODRIVERSTATE EtwpHostSiloState +0x000 Silo : Ptr64 _EJOB // 主操作系统 Silo(即非容器、非 Job 隔离的传统 Windows 环境) +0x008 SiloGlobals : 0xfffff800`22a47540 _ESERVERSILO_GLOBALS // 全局内核对象表(如进程、线程、注册表等命名空间), 即 PspHostSiloGlobals +0x010 MaxLoggers : 0x40 // 当前 Silo 允许的最大 ETW Logger 数量 +0x018 EtwpSecurityProviderGuidEntry : _ETW_GUID_ENTRY +0x1a8 EtwpLoggerRundown : 0xffffa908`459c2900 -> 0xffffa908`45850510 _EX_RUNDOWN_REF_CACHE_AWARE // 用于 Logger 引用计数与安全析构 +0x1b0 EtwpLoggerContext : 0xffffa908`459c2b00 -> 0xffffa908`49a4c040 _WMI_LOGGER_CONTEXT // 指向 LoggerTable[LoggerId] +0x1b8 EtwpGuidHashTable : [64] _ETW_HASH_BUCKET // 可通过 hash_table 计算 guid 快速获取 GuidEntry, 例如函数 EtwpFindGuidEntryByGuid +0xfb8 EtwpSecurityLoggers : [8] 3 +0xfc8 EtwpSecurityProviderEnableMask : 0x3 '' +0xfcc EtwpShutdownInProgress : 0n0 // Silo 关闭标志 +0xfd0 EtwpSecurityProviderPID : 0x344 // lsass.exe (Local Security Authority Subsystem Service) 是当前注册安全提供者的进程 // LSASS 负责处理本地安全和登录管理等关键任务 +0xfd8 PrivHandleDemuxTable : _ETW_PRIV_HANDLE_DEMUX_TABLE // 私有句柄多路复用表. 允许用户态通过 OpenTrace 获取 Logger 句柄; 维护句柄到 _WMI_LOGGER_CONTEXT 的映射. +0xff8 EtwpCounters : _ETW_COUNTERS // ETW 性能计数器集合 +0x1008 LogfileBytesWritten : _LARGE_INTEGER 0x17d1800 +0x1010 ProcessorBlocks : 0xffffa908`459c2240 _ETW_SILO_TRACING_BLOCK +0x1018 ContainerRestoreWnfSubscription : 0xffffe283`2a98ac40 _EX_WNF_SUBSCRIPTION +0x1020 PartitionId : _GUID {00000000-0000-0000-0000-000000000000} +0x1030 ParentId : _GUID {00000000-0000-0000-0000-000000000000} +0x1040 QpcOffsetFromRoot : _LARGE_INTEGER 0x0 +0x1048 PartitionType : 0 // Silo 分区类型 // 0: 主系统; 1:WSL2; 2:Windows Server Container; 3: Job Object Isolation. +0x104c SystemLoggerSettings : _ETW_SYSTEM_LOGGER_SETTINGS // 系统级 Logger 全局配置 +0x11c0 EtwpStartTraceMutex : _KMUTANTdt nt!_WMI_LOGGER_CONTEXT ffffa908`458d79c0 +0x000 LoggerId : 2 +0x004 BufferSize : 0x1000 +0x008 MaximumEventSize : 0xfb8 +0x00c LoggerMode : 0x2800480 +0x010 AcceptNewEvents : 0n0 +0x014 EventMarker : [2] 0xc0130000 +0x01c ErrorMarker : 0xc00d0000 +0x020 SizeMask : 0xffff +0x028 GetCpuClock : 0xfffff800`225f5700 int64 nt!EtwpGetCycleCount+0 // 函数指针的指向依据CKCL_TRACE_PROPERIES.EVENT_TRACE_PROPERTIES.Wnode.ClientContext进行赋值 // 1:PpmQueryTime, 2:EtwpGetSystemTime, 3:EtwpGetCycleCount /* unsigned __int64 EtwpGetCycleCount() { return __rdtsc(); } */ +0x030 LoggerThread : (null) +0x038 LoggerStatus : 0n0 // 会话状态 +0x03c FailureReason : 0 +0x040 BufferQueue : _ETW_BUFFER_QUEUE +0x050 OverflowQueue : _ETW_BUFFER_QUEUE +0x060 GlobalList : _LIST_ENTRY [ 0xffffa908`45aed038 - 0xffffa908`45aee038 ] // 全局ETW日志器列表 +0x070 DebugIdTrackingList : _LIST_ENTRY [ 0xffffa908`458d7a30 - 0xffffa908`458d7a30 ] +0x080 DecodeControlList : (null) +0x088 DecodeControlCount : 0 +0x090 BatchedBufferList : (null) +0x090 CurrentBuffer : _EX_FAST_REF +0x098 LoggerName : _UNICODE_STRING "Circular Kernel Context Logger" +0x0a8 LogFileName : _UNICODE_STRING "" +0x0b8 LogFilePattern : _UNICODE_STRING "" +0x0c8 NewLogFileName : _UNICODE_STRING "" +0x0d8 ClockType : 3 // 时钟类型 3:QPC +0x124 InstanceGuid : _GUID {54dea73a-ed1f-42a4-af71-3e63d056f174} // InstanceGuid 不直接与 _ETW_GUID_ENTRY 进行关联 // 而是通过通过 ETW 的会话启用(Enable)机制和事件投递路径在运行时发生逻辑关联 +0x150 CollectionOn : 0n1 // 事件收集已启用(CKCL已激活) +0x154 ProviderInfoSize : Uint4B +0x158 Consumers : _LIST_ENTRY [ 0xffffa908`4aff0ea0 - 0xffffa908`4aff0ea0 ] // 消费者, 接收事件 +0x2c0 LoggerLock : _EX_PUSH_LOCK +0x458 SiloState : _ETW_SILODRIVERSTATE // 指向当前所属 Silo +0x518 CallbackContext : Ptr64 _ETW_EVENT_CALLBACK_CONTEXT // 在函数 EtwpLogKernelEvent 中, 调用 EtwpReserveTraceBuffer 写入 ETW 后, // 判断是否需要调用 EtwpInvokeEventCallback 执行回调dt nt!_WMI_LOGGER_CONTEXT ffffa908`458d79c0 +0x000 LoggerId : 2 +0x004 BufferSize : 0x1000 +0x008 MaximumEventSize : 0xfb8 +0x00c LoggerMode : 0x2800480 +0x010 AcceptNewEvents : 0n0 +0x014 EventMarker : [2] 0xc0130000 +0x01c ErrorMarker : 0xc00d0000 +0x020 SizeMask : 0xffff +0x028 GetCpuClock : 0xfffff800`225f5700 int64 nt!EtwpGetCycleCount+0 // 函数指针的指向依据CKCL_TRACE_PROPERIES.EVENT_TRACE_PROPERTIES.Wnode.ClientContext进行赋值 // 1:PpmQueryTime, 2:EtwpGetSystemTime, 3:EtwpGetCycleCount /* unsigned __int64 EtwpGetCycleCount() { return __rdtsc(); } */ +0x030 LoggerThread : (null) +0x038 LoggerStatus : 0n0 // 会话状态 +0x03c FailureReason : 0 +0x040 BufferQueue : _ETW_BUFFER_QUEUE +0x050 OverflowQueue : _ETW_BUFFER_QUEUE +0x060 GlobalList : _LIST_ENTRY [ 0xffffa908`45aed038 - 0xffffa908`45aee038 ] // 全局ETW日志器列表 +0x070 DebugIdTrackingList : _LIST_ENTRY [ 0xffffa908`458d7a30 - 0xffffa908`458d7a30 ] +0x080 DecodeControlList : (null) +0x088 DecodeControlCount : 0 +0x090 BatchedBufferList : (null) +0x090 CurrentBuffer : _EX_FAST_REF +0x098 LoggerName : _UNICODE_STRING "Circular Kernel Context Logger" +0x0a8 LogFileName : _UNICODE_STRING "" +0x0b8 LogFilePattern : _UNICODE_STRING "" +0x0c8 NewLogFileName : _UNICODE_STRING "" +0x0d8 ClockType : 3 // 时钟类型 3:QPC +0x124 InstanceGuid : _GUID {54dea73a-ed1f-42a4-af71-3e63d056f174} // InstanceGuid 不直接与 _ETW_GUID_ENTRY 进行关联 // 而是通过通过 ETW 的会话启用(Enable)机制和事件投递路径在运行时发生逻辑关联 +0x150 CollectionOn : 0n1 // 事件收集已启用(CKCL已激活) +0x154 ProviderInfoSize : Uint4B +0x158 Consumers : _LIST_ENTRY [ 0xffffa908`4aff0ea0 - 0xffffa908`4aff0ea0 ] // 消费者, 接收事件 +0x2c0 LoggerLock : _EX_PUSH_LOCK +0x458 SiloState : _ETW_SILODRIVERSTATE // 指向当前所属 Silo +0x518 CallbackContext : Ptr64 _ETW_EVENT_CALLBACK_CONTEXT // 在函数 EtwpLogKernelEvent 中, 调用 EtwpReserveTraceBuffer 写入 ETW 后, // 判断是否需要调用 EtwpInvokeEventCallback 执行回调nt!_ETW_GUID_ENTRY +0x000 GuidList : _LIST_ENTRY [ 0xffffa908`459fe390 - 0xffffa908`45b3ba50 ] // _ETW_GUID_ENTRY +0x010 RefCount : 0n2 // 引用计数 +0x018 Guid : _GUID {e02a841c-75a3-4fa7-afc8-ae09cf9b7f23} +0x028 RegListHead : _LIST_ENTRY [ 0xffffa908`458f8710 - 0xffffa908`458f8710 ] // _ETW_REG_ENTRY // 当事件发生时,ETW 遍历此列表,将事件分发给每个注册的 Logger +0x038 SecurityDescriptor : 0xffffe283`2a911520 Void +0x040 LastEnable : _ETW_LAST_ENABLE_INFO +0x040 MatchId : 0 +0x050 ProviderEnableInfo : _TRACE_ENABLE_INFO +0x070 EnableInfo : [8] _TRACE_ENABLE_INFO // 支持8项 +0x170 FilterData : (null) // 事件过滤器(如 PID 过滤、事件 ID 过滤) +0x178 SiloState : 0xffffa908`459c1000 _ETW_SILODRIVERSTATE // 指向所属 silo +0x180 Lock : _EX_PUSH_LOCK +0x188 LockOwner : (null) nt!_ETW_REG_ENTRY +0x000 RegList : _LIST_ENTRY // _ETW_REG_ENTRY +0x010 GroupRegList : _LIST_ENTRY +0x020 GuidEntry : Ptr64 _ETW_GUID_ENTRY +0x028 GroupEntry : Ptr64 _ETW_GUID_ENTRY +0x030 ReplyQueue : Ptr64 _ETW_REPLY_QUEUE +0x030 ReplySlot : [4] Ptr64 _ETW_QUEUE_ENTRY +0x030 Caller : Ptr64 Void +0x038 SessionId : Uint4B // 提供 Provider 与 Logger 之间的绑定记录, 时间上为 LoggerId // 通过 _ETW_SILODRIVERSTATE::EtwpLoggerContext[LoggerId] 进行索引 _WMI_LOGGER_CONTEXT +0x050 Process : Ptr64 _EPROCESS +0x050 CallbackContext : Ptr64 Void // 回调上下文 +0x058 Callback : Ptr64 Void // ETW 将在跟踪会话启用或禁用此提供程序时调用 +0x060 Index : Uint2B // 哈希表桶索引 +0x062 Flags : Uint2B +0x062 DbgKernelRegistration : Pos 0, 1 Bit +0x062 DbgUserRegistration : Pos 1, 1 Bit +0x062 DbgReplyRegistration : Pos 2, 1 Bit +0x062 DbgClassicRegistration : Pos 3, 1 Bit +0x062 DbgSessionSpaceRegistration : Pos 4, 1 Bit +0x062 DbgModernRegistration : Pos 5, 1 Bit +0x062 DbgClosed : Pos 6, 1 Bit +0x062 DbgInserted : Pos 7, 1 Bit +0x062 DbgWow64 : Pos 8, 1 Bit +0x062 DbgUseDescriptorType : Pos 9, 1 Bit +0x062 DbgDropProviderTraits : Pos 10, 1 Bit +0x064 EnableMask : UChar +0x065 GroupEnableMask : UChar +0x068 Traits : Ptr64 _ETW_PROVIDER_TRAITSnt!_ETW_GUID_ENTRY +0x000 GuidList : _LIST_ENTRY [ 0xffffa908`459fe390 - 0xffffa908`45b3ba50 ] // _ETW_GUID_ENTRY +0x010 RefCount : 0n2 // 引用计数 +0x018 Guid : _GUID {e02a841c-75a3-4fa7-afc8-ae09cf9b7f23} +0x028 RegListHead : _LIST_ENTRY [ 0xffffa908`458f8710 - 0xffffa908`458f8710 ] // _ETW_REG_ENTRY // 当事件发生时,ETW 遍历此列表,将事件分发给每个注册的 Logger +0x038 SecurityDescriptor : 0xffffe283`2a911520 Void +0x040 LastEnable : _ETW_LAST_ENABLE_INFO +0x040 MatchId : 0 +0x050 ProviderEnableInfo : _TRACE_ENABLE_INFO +0x070 EnableInfo : [8] _TRACE_ENABLE_INFO // 支持8项 +0x170 FilterData : (null) // 事件过滤器(如 PID 过滤、事件 ID 过滤) +0x178 SiloState : 0xffffa908`459c1000 _ETW_SILODRIVERSTATE // 指向所属 silo +0x180 Lock : _EX_PUSH_LOCK +0x188 LockOwner : (null) nt!_ETW_REG_ENTRY +0x000 RegList : _LIST_ENTRY // _ETW_REG_ENTRY[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!