配置和启动全局记录器会话

全局记录器事件跟踪会话记录在操作系统启动过程早期发生的事件。 应用程序和设备驱动程序可以使用全局记录器会话在用户登录之前捕获跟踪。 请注意,某些设备驱动程序(如磁盘设备驱动程序)在全局记录器会话开始时不会加载。

注意

如果要在 Windows Vista 上创建全局记录器会话,应考虑改为创建 AutoLogger 会话

使用注册表配置全局记录器会话。 将 GlobalLogger 项添加到以下注册表项(如果尚不存在):

HKEY_LOCAL_MACHINE
   \SYSTEM
      \CurrentControlSet
         \Control
            \WMI

下表描述了可以为 GlobalLogger 键定义的值。 必须具有管理员权限才能指定这些注册表值。 注册表值会影响将事件记录到全局记录器会话的所有提供程序。 Start 值是启动全局记录器会话所需的唯一值;如果注册表中不存在该值,则所有其他值都具有默认设置。 通常,应使用默认值。 如果指定 ETW 不支持的值,则 ETW 将替代该值。

类型 说明
启动 REG_DWORD 在) 将此值设置为 1 (,以在系统下次启动时启动全局记录器会话。 若要停止启动会话,请将此值设置为 0 (关闭) 。
BufferSize REG_DWORD 每个缓冲区的大小(以 KB 为单位)。 此值应小于 1 MB。 ETW 使用物理内存的大小来计算此值。
ClockType REG_DWORD 记录每个事件的时间戳时要使用的计时器。
  • 1 = (高分辨率) 的性能计数器值
  • 2 = 系统计时器
  • 3 = CPU 周期计数器
有关每种时钟类型的说明,请参阅 WNODE_HEADERClientContext 成员。
默认值为 1 (Windows Vista 及更高版本) 性能计数器值。 在 Windows Vista 之前,默认值为 2 (系统计时器) 。
EnableKernelFlags REG_BINARY 使用此值可启用一个或多个内核提供程序。 如果启用内核提供程序,则全局记录器会话将在启动时将自身重命名为 NT 内核记录器。 有关可能的值,请参阅 EVENT_TRACE_PROPERTIESEnableFlags 成员。
FileCounter REG_DWORD 全局记录器会话生成的事件跟踪日志文件数。 系统递增此值,直到达到 FileMax 的值。 然后,它将值重置为 0。 此计数器可防止系统覆盖全局记录器跟踪日志文件。
FileMax REG_DWORD 系统上允许的最大事件跟踪日志文件数。 当跟踪日志数达到指定最大值时,系统开始覆盖从最早的日志开始。
如果 FileName 中指定的日志文件存在,ETW 会将 FileCounter 值追加到文件名。 例如,如果使用默认日志文件名,则窗体为 %SystemRoot%\System32\LogFiles\WMI\GlobalLogger.etl.NNNN。
默认值为 0,表示没有最大值。
FileName REG_SZ 日志文件的完全限定路径。 此文件的路径必须存在。 日志文件是顺序日志文件。 请注意,所有将事件写入全局记录器会话的提供程序都会将事件写入此日志文件。 路径限制为 1024 个字符。如果未指定 FileName ,事件将写入 %SystemRoot%\System32\LogFiles\WMI\GlobalLogger.etl。 在 Windows Vista 之前: 默认文件为 %SystemRoot%\System32\LogFiles\WMI\Trace.log。

FlushTimer REG_DWORD 强制刷新跟踪缓冲区的频率(以秒为单位)。 最小刷新时间为 1 秒。 此强制刷新是缓冲区已满和跟踪会话停止时发生的自动刷新的补充。
对于实时记录器,值为零 (默认值) 意味着刷新时间将设置为 1 秒。 当 LogFileMode 设置为 EVENT_TRACE_REAL_TIME_MODE 时,实时记录器为 。
默认值为 0。 默认情况下,仅当缓冲区已满时才刷新缓冲区。
LogFileMode REG_DWORD 指定日志会话选项。 有关值,请参阅 日志记录模式常量。 Windows Vista 及更高版本支持此值。
MaximumBuffers REG_DWORD 要分配的最大缓冲区数。 通常,此值是缓冲区的最小数目加上 20。 ETW 使用缓冲区大小和物理内存大小来计算此值。 此值必须大于或等于 MinimumBuffers 的值。
MaxFileSize REG_DWORD 事件跟踪日志文件的最大大小(以 MB 为单位)。 默认情况下,没有最大文件大小。
MinimumBuffers REG_DWORD 全局记录器会话启动时要分配的最小缓冲区数。 可以指定的最小缓冲区数是每个处理器两个缓冲区。 例如,在单个处理器计算机上,最小缓冲区数为 2。
单处理器系统上的默认值为0x3。
Status REG_DWORD 全局记录仪的启动状态。 如果全局记录器无法启动,则此键的值是相应的 Win32 错误代码。 如果全局记录器已成功启动,则此键的值ERROR_SUCCESS (0) 。

修改注册表并重启计算机后,全局记录器会话将自动启动,并且与任何其他会话一样使用,但有一个例外:使用 Wmistr.h) 中定义的WMI_GLOBAL_LOGGER_ID常量句柄 (引用全局记录器会话。 此常量可用作接受会话句柄的任何事件跟踪函数的参数。 在接受会话名称的函数中,使用 GLOBAL_LOGGER_NAME。

全局记录器控制器不调用 EnableTrace 函数来启用提供程序。 提供程序负责确定是否启动全局记录器会话,然后自行启用。

若要确定是否启动全局记录器会话,可以调用 ControlTrace 函数,将 SessionHandle 设置为 WMI_GLOBAL_LOGGER_ID,将 ControlCode 设置为 EVENT_TRACE_CONTROL_QUERY。 如果 ControlTrace 调用成功,则全局记录器会话存在,提供程序可以启用自身并将事件记录到全局记录器会话, (如果全局记录器) 未处于活动状态, 则 ControlTrace 函数返回ERROR_WMI_INSTANCE_NOT_FOUND。

通常,控制器负责在启用提供程序时将启用标志和级别传递给提供程序,但由于全局记录器控制器不启用提供程序,因此提供程序负责根据需要将此信息传递给自身。

全局记录器会话是有限的资源,应谨慎使用。 想要在启动过程中捕获信息的服务应考虑将控制器逻辑添加到自身,而不是使用全局记录器会话。

有关启动事件跟踪会话的详细信息,请参阅 配置和启动事件跟踪会话

有关启动专用记录器会话的详细信息,请参阅 配置和启动专用记录器会话

有关启动 NT 内核记录器会话的详细信息,请参阅 配置和启动 NT 内核记录器会话