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 ==> PerfInfoLogSysCallEntrypath2 (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 : _KMUTANT
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 : _KMUTANT
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 执行回调
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_TRAITS
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
传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2天前
被ALwalker编辑
,原因: 补充内容