配置和启动自动记录器会话

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

AutoLogger 与全局记录器在以下方面不同:

  • 可以指定一个或多个 AutoLogger 会话, (全局记录器是一个会话,每个人都) 记录事件。
  • 当会话启动时,AutoLogger 会向提供程序发送启用通知 (全局记录器未向提供程序发送启用通知,因此提供程序必须依靠其他方法来了解全局记录器会话是否已启动,以便开始记录) 事件。
  • AutoLogger 不支持记录 NT 内核记录器事件 (查看 EVENT_TRACE_PROPERTIES) 的 EnableFlags 成员。 若要记录 NT 内核记录器事件,必须使用 全局记录器

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

注意

ETW 支持 Windows Vista 及更高版本上的自动记录器。 在早期操作系统上使用 全局记录器

使用注册表配置 AutoLogger 会话。 添加以下注册表项(如果尚不存在):

HKEY_LOCAL_MACHINE
   \SYSTEM
      \CurrentControlSet
         \Control
            \WMI
               \Autologger

“自动记录器 ”键下,为要配置的每个 AutoLogger 会话创建一个密钥,如以下示例所示。

HKEY_LOCAL_MACHINE
   \SYSTEM
      \CurrentControlSet
         \Control
            \WMI
               \Autologger
                  \Logger Session A
                  \Logger Session B
                  \Logger Session C

对于每个会话,请为每个要为会话启用的提供程序创建一个密钥。 使用提供程序的 GUID 作为密钥。

HKEY_LOCAL_MACHINE
   \SYSTEM
      \CurrentControlSet
         \Control
            \WMI
               \Autologger
                  \Logger Session A
                     \{ProviderGuid1}
                     \{ProviderGuid2}
                  \Logger Session B
                  \Logger Session C

下表描述了可以为每个 AutoLogger 会话定义的值。 必须具有管理员权限才能指定这些注册表值。 StartGuid 值是启动 AutoLogger 会话所需的唯一值;如果注册表中不存在该值,则所有其他值都具有默认设置。 通常,应使用默认值。 如果指定 ETW 不支持的值,则 ETW 将替代该值。

类型 说明
BufferSize REG_DWORD 每个缓冲区的大小(以 KB 为单位)。 应小于 1 MB。 ETW 使用物理内存的大小来计算此值。
ClockType REG_DWORD 记录每个事件的时间戳时要使用的计时器。
  • 1 = (高分辨率) 的性能计数器值
  • 2 = 系统计时器
  • 3 = CPU 周期计数器
有关每种时钟类型的说明,请参阅 WNODE_HEADERClientContext 成员。
默认值为 1 (Windows Vista 及更高版本) 性能计数器值。 在 Windows Vista 之前,默认值为 2 (系统计时器) 。
DisableRealtimePersistence REG_DWORD 若要禁用实时持久性,请将此值设置为 1。 对于实时会话,默认为 0 (启用) 。
如果启用了实时持久性,则计算机关闭时未传递的实时事件将持久保存。 然后,当使用者下次连接到会话时,事件将传送给使用者。
FileCounter REG_DWORD 请勿设置或修改此值。 如果指定了 FileMax ,此值是用于递增日志文件名的序列号。 如果值无效,则假定为 1。
FileName REG_SZ 日志文件的完全限定路径。 此文件的路径必须存在。 日志文件是顺序日志文件。 路径限制为 1024 个字符。
如果未指定 FileName ,事件将写入 %SystemRoot%\System32\LogFiles\WMI<sessionname.etl>。
FileMax REG_DWORD ETW 创建的日志文件的最大实例数。 如果 FileName 中指定的日志文件存在,ETW 会将 FileCounter 值追加到文件名。 例如,如果使用默认日志文件名,则格式为 %SystemRoot%\System32\LogFiles\WMI<sessionname.etl>。NNNN.
第一次启动计算机时,文件名为 <sessionname.etl.0001>,第二次文件名为 <sessionname.etl.0002>,依依此。 如果 FileMax 为 3,则第四次重启计算机时,ETW 会将计数器重置为 1,并覆盖 <sessionname.etl.0001>(如果存在)。
支持的日志文件的最大实例数为 16。
请勿将此功能用于 EVENT_TRACE_FILE_MODE_NEWFILE 日志文件模式。
FlushTimer REG_DWORD 强制刷新跟踪缓冲区的频率(以秒为单位)。 最小刷新时间为 1 秒。 此强制刷新是缓冲区已满和跟踪会话停止时发生的自动刷新的补充。
对于实时记录器,值为零 (默认值) 意味着刷新时间将设置为 1 秒。 当 LogFileMode 设置为 EVENT_TRACE_REAL_TIME_MODE 时,实时记录器为 。
默认值为 0。 默认情况下,仅当缓冲区已满时才刷新缓冲区。
Guid REG_SZ 包含唯一标识会话的 GUID 的字符串。 此值是必需的。
LogFileMode REG_DWORD 指定一个或多个日志模式。 有关可能的值,请参阅 日志记录模式常量。 默认值为 EVENT_TRACE_FILE_MODE_SEQUENTIAL。 可以指定 EVENT_TRACE_BUFFERING_MODEEVENT_TRACE_REAL_TIME_MODE,而不是写入日志文件。
指定 EVENT_TRACE_BUFFERING_MODE 可避免在文件系统可用时将会话内容刷新到磁盘的成本。
请注意,使用 EVENT_TRACE_BUFFERING_MODE 将导致系统忽略 MaximumBuffers 值,因为缓冲区大小是 MinimumBuffersBufferSize 的乘积。
AutoLogger 会话不支持 EVENT_TRACE_FILE_MODE_NEWFILE 日志记录模式。
如果指定 了EVENT_TRACE_FILE_MODE_APPEND ,则必须显式提供 BufferSize ,并且必须在记录器和要追加的文件中都相同。
MaxFileSize REG_DWORD 日志文件的最大文件大小(以 MB 为单位)。 除非处于循环日志文件模式,否则会话在达到最大大小时关闭。 若要指定无限制,请将值设置为 0。 如果未设置,则默认值为 100 MB。 达到最大文件大小时发生的行为取决于 LogFileMode 的值。
MaximumBuffers REG_DWORD 要分配的最大缓冲区数。 通常,此值是缓冲区的最小数目加上 20。 ETW 使用缓冲区大小和物理内存大小来计算此值。 此值必须大于或等于 MinimumBuffers 的值。
MinimumBuffers REG_DWORD 启动时要分配的最小缓冲区数。 可以指定的最小缓冲区数是每个处理器两个缓冲区。 例如,在单个处理器计算机上,最小缓冲区数为 2。
Start REG_DWORD 若要在下次重启计算机时启动 AutoLogger 会话,请将此值设置为 1;否则,请将此值设置为 0。
Status REG_DWORD 自动记录器的启动状态。 如果 AutoLogger 无法启动,则此键的值是相应的 Win32 错误代码。 如果自动记录器成功启动,则此键的值 ERROR_SUCCESS (0) 。
引导 REG_DWORD 不应在调试方案之外使用此功能。
如果此注册表项设置为 1,则自动记录程序将在内核初始化期间比正常时间更早启动,从而在初始化许多重要内核子系统期间捕获事件。 但是, 启用此选项会对启动时间产生负面影响 ,并且会对自动记录程序施加其他限制。 如果启用此功能, 则必须 填充自动记录器会话 GUID,并且许多其他自动记录器设置可能不起作用。
Windows Server 2022 及更高版本支持此密钥。

下表描述了可为要启用到会话的每个提供程序定义的值。 必须具有管理员权限才能指定这些注册表值。 如果指定 ETW 不支持的值,则 ETW 将替代该值。

类型 说明
已启用 REG_DWORD 确定是否启用提供程序。 若要启用提供程序,请将此值设置为 1。 若要禁用提供程序,请将此值设置为 0。 默认值为 0。
EnableFlags REG_DWORD 提供程序定义的值,该值指定提供程序为其生成事件的事件类。 有关详细信息,请参阅 EnableTrace 函数的 EnableFlags 参数。 如果提供程序不支持 MatchAnyKeywordMatchAllKeyword,请指定此值名称。
EnableLevel REG_DWORD 提供程序定义的值,该值指定事件中包含的详细信息级别。 例如,可以使用此值来指示提供程序生成的事件 (信息性、警告、错误) 的严重性级别。 有关预定义级别的列表,请参阅 EnableTraceEx 函数的 level 参数。
EnableProperty REG_DWORD 使用此值在日志文件中包含以下一个或多个项:
  • EVENT_ENABLE_PROPERTY_SID (0x00000001) = 在扩展数据中包括用户的安全标识符 (SID) 。
  • EVENT_ENABLE_PROPERTY_TS_ID (0x00000002) = 在扩展数据中包含终端会话标识符。
  • EVENT_ENABLE_PROPERTY_STACK_TRACE (0x00000004) = 在扩展数据中包含使用 EventWrite 编写的事件的调用堆栈跟踪。
  • EVENT_ENABLE_PROPERTY_IGNORE_KEYWORD_0 (0x00000010) = 筛选掉未指定非零关键字 (keyword) 的所有事件。
  • EVENT_ENABLE_PROPERTY_PROVIDER_GROUP (0x00000020) = 指示对 EnableTraceEx2 的此调用应启用 提供程序组 而不是单个事件提供程序。
  • EVENT_ENABLE_PROPERTY_PROCESS_START_KEY (0x00000080) = 在扩展数据中包含进程启动键。
  • EVENT_ENABLE_PROPERTY_EVENT_KEY (0x00000100) = 在扩展数据中包含事件键。
  • EVENT_ENABLE_PROPERTY_EXCLUDE_INPRIVATE (0x00000200) = 筛选掉标记为 InPrivate 事件或来自标记为 InPrivate 的进程的所有事件。
有关这些项的详细信息,请参阅 ENABLE_TRACE_PARAMETERS 结构的 EnableProperty
MatchAnyKeyword REG_QWORD 关键字的位掩码,用于确定希望提供程序写入的事件类别。 如果事件的任何关键字 (keyword) 位与此掩码中设置的任何位匹配,则提供程序将写入事件。 若要指定提供程序写入所有事件,请将此值设置为零。 有关示例,请参阅 EnableTraceEx 函数的“备注”部分。
MatchAllKeyword REG_QWORD 此位掩码是可选的。 此掩码进一步限制你希望提供程序写入的事件类别。 如果事件的关键字 (keyword) 满足 MatchAnyKeyword 条件,则仅当事件关键字 (keyword) 中存在此掩码中的所有位时,提供程序才会写入事件。 如果 MatchAnyKeyword 为零,则不使用此掩码。 有关示例,请参阅 EnableTraceEx 函数的“备注”部分。

修改注册表后,下次重启计算机时将启动 AutoLogger 会话。 AutoLogger 会话调用 EnableTraceEx 函数来启用提供程序。

AutoLogger 会话会增加系统启动时间,应谨慎使用。 想要在启动过程中捕获信息的服务应考虑将控制器逻辑添加到自身,而不是使用 AutoLogger 会话。

若要停止 AutoLogger 会话,请调用 ControlTrace 函数。 传递给函数的会话名称是用于在注册表中定义会话的注册表项的名称。

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

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

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

配置和启动专用记录器会话

配置和启动 SystemTraceProvider 会话

配置和启动事件跟踪会话

配置和启动 NT 内核记录器会话

EnableTraceEx2

ENABLE_TRACE_PARAMETERS

EVENT_FILTER_DESCRIPTOR

PAYLOAD_FILTER_PREDICATE

TdhAggregatePayloadFilters

TdhCreatePayloadFilter

更新事件跟踪会话