全局记录器跟踪会话记录在系统完全运行之前在启动过程中发生的事件,例如设备驱动程序生成的事件。 它是内置于 Windows 中的保留跟踪会话。
全局记录器跟踪会话始终将消息写入跟踪日志。 全局记录器不支持实时跟踪会话或缓冲跟踪会话。
由于全局记录器必须在操作系统启动过程的早期就可用,因此使用注册表项(在 HKLM\SYSTEM\CurrentControlSet\Control\WMI\GlobalLogger 子项中),而不是函数调用,来启动和配置全局记录器。 启动后,全局记录器的行为类似于常规事件跟踪会话。
全局记录器跟踪会话使用保留的会话名称“GlobalLogger”。 控件 GUID 由常量 GlobalLoggerGuid 表示。 创建全局记录器跟踪会话,然后重新启动计算机以启动跟踪会话。 一次只能运行一个全局记录器跟踪会话。
若要创建全局记录器跟踪会话,请使用 Tracelog。 它会自动创建存储跟踪会话选项的注册表子项和条目。 重启计算机时,全局记录器跟踪会话将启动。 有关详细信息,请参阅 Tracelog 命令语法。
若要设置全局记录器跟踪会话中的跟踪消息的格式,请将 Tracefmt 与 system.tmf 配合使用,这是 WDK 中包含的 跟踪消息格式文件 。
由于全局记录器会话是由注册表项触发的,因此每次这些项出现在注册表中时,它都会运行。 若要防止每次系统启动时启动全局记录器会话,请将 “开始” 条目的值设置为 0 或删除所有注册表项。
可以将全局记录器跟踪会话转换为 NT 内核记录器跟踪会话,从而跟踪启动过程中的内核。 有关信息,请参阅 启动时全局记录器会话
跟踪提供程序(如内核模式驱动程序和用户模式应用程序)可以登录到全局记录器跟踪会话。 这使你可以在系统启动期间跟踪驱动程序或其他跟踪提供程序。 有关信息,请参阅“记录到全局记录器会话”
全局记录器跟踪会话的限制
全局记录器跟踪会话非常有用,但请务必注意其限制:
一次只能运行一个全局记录器会话。
全局记录器会话不会向提供程序发送启用通知。
全局记录器注册表项保留在注册表中,在手动重置或删除它们之前有效,或使用 tracelog -remove 命令。 在重置它们之前,每次启动系统时,全局记录器会话都会启动。
Windows ACPI 记录器将永久启用以用于全局日志记录器跟踪会话。 此记录器中的跟踪消息显示在跟踪日志中。
如果在驱动程序登录到全局记录器会话时启动标准跟踪会话,驱动程序会切换到标准跟踪会话并开始日志记录。
全局记录器注册表项
下表显示了配置全局记录器会话的注册表项。 这些条目位于 HKLM\SYSTEM\CurrentControlSet\Control\WMI\GlobalLogger 子项中。 仅需要 “开始” 条目。
除了此表中的注册表项外,还可以在 GlobalLogger 子项下添加 ControlGUID 子项来表示记录到全局记录器跟踪会话的跟踪提供程序,例如驱动程序。 有关信息,请参阅 “记录到全局记录器会话”。
| 入口 | 数据类型 | DESCRIPTION |
|---|---|---|
启动 |
REG_DWORD |
设置为 1 (打开)时,全局记录器会话将在系统下次启动时启动。 0 = 关闭,1=开启 |
BufferSize |
REG_DWORD |
指定每个缓冲区的大小(以 KB 为单位)。 默认值为0x40(64 KB)。 |
时钟类型 |
REG_DWORD |
指定用于跟踪消息时间戳的计时器。 从 Windows Vista 开始,默认值为 1。 在 Windows Vista 之前的作系统上,默认值为 2。 1 = 性能计数器值 (高分辨率) 2 = 系统计时器 3 = CPU 周期时钟 |
启用内核标志 |
REG_BINARY |
将全局记录器会话转换为 NT 内核记录器跟踪会话,并指定内核跟踪中包含的事件。 有关信息,请参阅 启动时全局记录器会话。 |
FileCounter |
REG_DWORD |
存储全局记录器会话生成的事件跟踪日志文件数。 系统递增此值,直到达到 FileMax 的值。 然后,它将值重置为 0。 此计数器可防止系统覆盖全局记录器跟踪日志文件。 |
FileMax |
REG_DWORD |
指定系统上允许的最大事件跟踪日志文件数。 当跟踪日志数达到指定最大值时,系统开始覆盖日志,从最早开始。 默认值为 0,表示没有最大值。 |
文件名 |
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 注册表项中的常量。
| 价值 | 恒定 | DESCRIPTION |
|---|---|---|
0x0 |
EVENT_TRACE_FILE_MODE_NONE |
不会创建事件跟踪日志文件。 |
0x1 |
EVENT_TRACE_FILE_MODE_SEQUENTIAL |
事件跟踪日志文件是有序的。 |
0x2 |
循环事件跟踪文件模式 |
事件跟踪日志文件是循环的。 |
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 |
不可停止模式事件追踪 |
对 StopTrace 的调用不会停止跟踪会话。 此功能可防止用户停止系统诊断和优化所需的跟踪会话。 |
0x100 |
EVENT_TRACE_REAL_TIME_MODE |
设定实时跟踪会话。 |
0x200 |
(EVENT_TRACE_DELAY_OPEN_FILE_MODE remains unchanged as it is likely a standardized identifier in the technical domain.) |
仅供内部使用。 |
0x400 |
EVENT_TRACE_BUFFERING_MODE |
事件保留在缓冲区中。 它们永远不会写入日志文件或传送到跟踪使用者。 |
0x800 |
EVENT_TRACE_PRIVATE_LOGGER_MODE |
指定专用跟踪会话。 此标志对全局记录器跟踪会话无效。 |
0x1000 |
事件跟踪添加标头模式 (EVENT_TRACE_ADD_HEADER_MODE) |
仅供内部使用。 |
0x2000 |
EVENT_TRACE_USE_KBYTES_FOR_SIZE |
以 KB 为单位解释 MaximumFileSize 的值,而不是 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 |
从可分页内存分配跟踪会话缓冲区。 默认情况下,缓冲区是从不可分页的内存中分配的。 |