全局记录器跟踪会话
全局记录器跟踪会话记录在系统完全正常运行之前启动过程中发生的事件,例如设备驱动程序生成的事件。 它是内置于 Windows 中的保留跟踪会话。
全局记录器跟踪会话始终将消息写入跟踪日志。 全局记录器不支持实时跟踪会话或缓冲跟踪会话。
由于全局记录器必须在操作系统启动过程的早期可用,因此它通过使用 HKLM\SYSTEM\CurrentControlSet\Control\WMI\GlobalLogger 子项) 中的注册表项 (启动和配置,而不是函数调用。 启动后,全局记录器的行为类似于常规事件跟踪会话。
全局记录器跟踪会话使用保留的会话名称“GlobalLogger”。 控件 GUID 由常量 GlobalLoggerGuid 表示。 创建全局记录器跟踪会话,然后重新启动计算机以启动跟踪会话。 一次只能在计算机上运行一个全局记录器跟踪会话。
若要创建全局记录器跟踪会话,请使用 Tracelog。 它会自动创建存储跟踪会话选项的注册表子项和条目。 重启计算机时,将启动全局记录器跟踪会话。 有关详细信息,请参阅 Tracelog 命令语法。
若要设置来自全局记录器跟踪会话的跟踪消息的格式,请将 Tracefmt 与 wDK 中包含的 跟踪消息格式化文件 system.tmf 一起使用。
由于全局记录器会话由注册表项触发,因此每次条目出现在注册表中时,它都会运行。 若要防止全局记录器会话在系统每次启动时启动,请将 “开始” 项的值设置为 0 或删除所有注册表项。
可以将全局记录器跟踪会话转换为 NT 内核记录器跟踪会话,从而在启动过程中跟踪内核。 有关信息,请参阅 启动时全局记录器会话
跟踪提供程序(如内核模式驱动程序和用户模式应用程序)可以记录到全局记录器跟踪会话。 这使你可以在系统启动期间跟踪驱动程序或其他跟踪提供程序。 有关信息,请参阅 记录到全局记录器会话
全局记录器跟踪会话的限制
全局记录器跟踪会话非常有用,但请务必注意其限制:
一次只能运行一个全局记录器会话。
全局记录器会话不会向提供程序发送启用通知。
全局记录器注册表项将保留在注册表中并有效,直到你手动重置或删除它们,或使用 tracelog -remove 命令。 在重置它们之前,每次启动系统时都会启动全局记录器会话。
已为全局记录器跟踪会话永久启用 Windows ACPI 记录器。 此记录器中的跟踪消息将显示在跟踪日志中。
如果在驱动程序日志记录到全局记录器会话时启动标准跟踪会话,驱动程序将切换到标准跟踪会话并开始日志记录。
全局记录器注册表项
下表显示了用于配置全局记录器会话的注册表项。 这些条目位于 HKLM\SYSTEM\CurrentControlSet\Control\WMI\GlobalLogger 子项中。 只需要 “开始” 条目。
除了此表中的注册表项外,还可以在 GlobalLogger 子项下添加 ControlGUID 子项,以表示记录到全局记录器跟踪会话的跟踪提供程序(例如驱动程序)。 有关信息,请参阅 日志记录到全局记录器会话。
条目 | 数据类型 | 说明 |
---|---|---|
启动 |
REG_DWORD |
当在) 设置为 1 (时,全局记录器会话将在系统下次启动时启动。 0 = off, 1=on |
BufferSize |
REG_DWORD |
以 KB) 为单位指定每个缓冲区 (的大小。 默认值为 0x40 (64 KB) 。 |
ClockType |
REG_DWORD |
指定用于跟踪消息时间戳的计时器。 从 Windows Vista 开始,默认值为 1。 在 Windows Vista 之前的操作系统上,默认值为 2。 1 = 高分辨率) (性能计数器值 2 = 系统计时器 3 = CPU 周期时钟 |
EnableKernelFlags |
REG_BINARY |
将全局记录器会话转换为 NT 内核记录器跟踪会话,并指定内核跟踪中包含的事件。 有关信息,请参阅 启动时全局记录器会话。 |
FileCounter |
REG_DWORD |
存储全局记录器会话生成的事件跟踪日志文件数。 系统递增此值,直到达到 FileMax 的值。 然后,它将值重置为 0。 此计数器可防止系统覆盖全局记录器跟踪日志文件。 |
FileMax |
REG_DWORD |
指定系统上允许的最大事件跟踪日志文件数。 当跟踪日志数达到指定的最大值时,系统会从最早的日志开始覆盖日志。 默认值为 0,表示没有最大值。 |
FileName |
REG_SZ |
路径 (事件跟踪日志文件的可选) 和文件名。 默认值为 %SystemRoot%\System32\LogFiles\WMI\trace.log。 |
FlushTimer |
REG_DWORD |
指定强制刷新跟踪缓冲区) (的频率(以秒为单位)。 除了这种强制刷新之外,还会在缓冲区已满且跟踪会话停止时自动刷新。 默认值为 0。 默认情况下,仅当缓冲区已满时才刷新。 最短刷新时间为 1 秒。 |
LogFileMode |
REG_DWORD |
指定日志会话选项。 仅在 Windows Vista 和更高版本的 Windows 中受支持。 |
MaximumBuffers |
REG_DWORD |
指定可为会话分配的最大缓冲区数。 默认值为 0x19 (25) 。 |
MaximumFileSize |
REG_DWORD |
指定事件跟踪日志文件的最大大小。 默认情况下,没有最大文件大小。 |
MinimumBuffers |
REG_DWORD |
指定会话启动时分配的缓冲区数。 默认值为 0x3。 |
Status |
REG_DWORD |
存储尝试启动全局记录器跟踪会话的返回代码。 如果会话无法启动,则此项的值是 Win32 错误代码。 如果会话已启动,则此项的值ERROR_SUCCESS。 |
创建的这些注册表项将保留在注册表中,并在删除或更改其值之前有效。 因此,在全局记录器会话运行后,使用 tracelog -remove GlobalLogger 命令将 Start 条目的值设置为 0 并删除其他全局记录器注册表项。 否则,全局记录器会话会在每次重启计算机时运行,生成的日志文件可能会变得非常大。
日志记录模式常量
下表显示了 HKLM\System\CurrentControlSet\Control\WMI\GlobalLogger 子项中 LogFileMode 注册表项的有效值。 此项用于设置全局记录器跟踪会话的选项,包括实时跟踪会话、专用跟踪会话、循环日志记录和缓冲 (无日志) 的选项。 此注册表项仅在 Windows Vista 和更高版本的 Windows 中受支持。
此注册表项对应于 EVENT_TRACE_PROPERTIES 结构的 LogFileMode 成员。 其值对应于日志记录模式常量。 Microsoft Windows SDK文档中介绍了EVENT_TRACE_PROPERTIES结构和日志记录模式常量。
此处显示此表以显示常量的十六进制值。 使用这些值或这些值的总和来表示 LogFileMode 注册表项中的常量。
“值” | 返回的常量 | 说明 |
---|---|---|
0x0 |
EVENT_TRACE_FILE_MODE_NONE |
不会创建任何事件跟踪日志文件。 |
0x1 |
EVENT_TRACE_FILE_MODE_SEQUENTIAL |
事件跟踪日志文件是连续的。 |
0x2 |
EVENT_TRACE_FILE_MODE_CIRCULAR |
事件跟踪日志文件是循环的。 |
0x4 |
EVENT_TRACE_FILE_MODE_APPEND |
将跟踪消息追加到现有日志文件。 此模式仅对顺序文件有效。 |
0x8 |
EVENT_TRACE_FILE_MODE_NEWFILE |
每当现有文件达到 MaximumFileSize 条目的值时,创建一个新的事件跟踪日志文件 (请参阅上表) 。 |
0x20 |
EVENT_TRACE_FILE_MODE_PREALLOCATE |
为事件跟踪日志文件保留空间。 仅对 EVENT_TRACE_FILE_MODE_SEQUENTIAL 或 EVENT_TRACE_FILE_MODE_CIRCULAR 有效,对 EVENT_TRACE_FILE_MODE_NEWFILE 无效。 |
0x40 |
EVENT_TRACE_NONSTOPPABLE_MODE |
调用 StopTrace 不会停止跟踪会话。 此功能可防止用户停止系统诊断和优化所需的跟踪会话。 |
0x100 |
EVENT_TRACE_REAL_TIME_MODE |
指定实时跟踪会话。 |
0x200 |
EVENT_TRACE_DELAY_OPEN_FILE_MODE |
仅限内部使用。 |
0x400 |
EVENT_TRACE_BUFFERING_MODE |
事件保留在缓冲区中。 它们永远不会写入日志文件或传递给跟踪使用者。 |
0x800 |
EVENT_TRACE_PRIVATE_LOGGER_MODE |
指定专用跟踪会话。 此标志对全局记录器跟踪会话无效。 |
0x1000 |
EVENT_TRACE_ADD_HEADER_MODE |
仅限内部使用。 |
0x2000 |
EVENT_TRACE_USE_KBYTES_FOR_SIZE |
解释 MaximumFileSize 的值(以 KB 为单位),而不是 MB。 |
0x4000 |
EVENT_TRACE_USE_GLOBAL_SEQUENCE |
为跟踪消息生成全局序列号。 这些数字对于计算机上的所有跟踪会话都是唯一的。 默认情况下,跟踪消息没有任何序列号。 |
0x8000 |
EVENT_TRACE_USE_LOCAL_SEQUENCE |
生成跟踪消息的本地序列号。 这些数字在跟踪会话中是唯一的。 默认情况下,跟踪消息没有任何序列号。 |
0x10000 |
EVENT_TRACE_RELOG_MODE |
仅限内部使用。 |
0x80000 |
EVENT_TRACE_KD_FILTER_MODE |
将跟踪消息重定向到内核调试器,并将跟踪缓冲区大小设置为 3 KB,即调试器的最大缓冲区大小。 |
0x1000000 |
EVENT_TRACE_MODE_RESERVED |
对全局记录器跟踪会话无效。 |
0x01000000 |
EVENT_TRACE_USE_PAGED_MEMORY |
从可分页内存分配跟踪会话缓冲区。 默认情况下,缓冲区是从不可分页内存中分配的。 |