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

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

注意

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

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

HKEY_LOCAL_MACHINE
   \SYSTEM
      \CurrentControlSet
         \Control
            \WMI

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

类型 说明
启动 REG_DWORD 在) 上将此值设置为 1 (,以便下次系统启动时启动全局记录器会话。 若要停止会话启动,请将此值设置为 0 (关闭) 。
BufferSize REG_DWORD 每个缓冲区的大小(以 KB 为单位)。 此值应小于一兆字节。 ETW 使用物理内存的大小来计算此值。
ClockType REG_DWORD 记录每个事件的时间戳时要使用的计时器。
  • 1 = 高性能计数器值 (高分辨率)
  • 2 = 系统计时器
  • 3 = CPU 周期计数器
有关每个时钟类型的说明,请参阅 WNODE_HEADERClientContext 成员。
默认值为 1 (vista 及更高版本的性能计数器值 Windows) 。 在 Windows Vista 之前,默认值为 2 (系统计时器) 。
EnableKernelFlags REG_BINARY 使用此值启用一个或多个内核提供程序。 如果启用内核提供程序,全局记录器会话将在启动时将其重命名为 NT 内核记录器。 有关可能的值,请参阅 EVENT_TRACE_PROPERTIES的 EnableFlags 成员。
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 内核记录器会话