配置和启动 AutoLogger 会话

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

AutoLogger 不同于全局记录器,方法如下:

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

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

注释

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

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

HKEY_LOCAL_MACHINE
   \SYSTEM
      \CurrentControlSet
         \Control
            \WMI
               \Autologger

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 将替代该值。

价值 类型 DESCRIPTION
BufferSize REG_DWORD 每个缓冲区的大小(以 KB 为单位)。 应小于 1 兆字节。 ETW 使用物理内存的大小来计算此值。
ClockType REG_DWORD 记录每个事件的时间戳时要使用的计时器。
  • 1 = 性能计数器值 (高分辨率)
  • 2 = 系统计时器
  • 3 = CPU 周期计数器
有关每个时钟类型的说明,请参阅 WNODE_HEADERClientContext 成员。
Windows Vista 及更高版本上的默认值为 1(性能计数器值)。 在 Windows Vista 之前,默认值为 2(系统计时器)。
DisableRealtimePersistence REG_DWORD 若要禁用实时持久性,请将此值设置为 1。 对于实时会话,默认值为 0(已启用)。
如果启用了实时持久性,则计算机关闭时未传送的实时事件将持久保存。 然后,在使用者下次连接到会话时,事件将传送给使用者。
FileCounter REG_DWORD 请勿设置或修改此值。 此值是用于在指定 FileMax 时递增日志文件名称的序列号。 如果值无效,则假定为 1。
文件名 REG_SZ 日志文件的完全限定路径。 此文件的路径必须存在。 日志文件是一个顺序日志文件。 路径限制为 1024 个字符。
如果未指定 FileName,事件将写入 %SystemRoot%\System32\LogFiles\WMI\.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 日志文件的最大文件大小(以兆字节为单位)。 达到最大大小时,会话将关闭,除非处于循环日志文件模式。 若要指定无限制,请将值设置为 0。 默认值为 100 MB(如果未设置)。 达到最大文件大小时发生的行为取决于 LogFileMode 的值。
MaximumBuffers REG_DWORD 要分配的最大缓冲区数。 通常,此值是最小缓冲区数加上 20。 ETW 使用缓冲区大小和物理内存大小来计算此值。 此值必须大于或等于 MinimumBuffers 的值。
MinimumBuffers REG_DWORD 启动时要分配的最小缓冲区数。 可以指定的最小缓冲区数是每个处理器的两个缓冲区。 例如,在单个处理器计算机上,最小缓冲区数为 2。
启动 REG_DWORD 若要在下次重启计算机时启动 AutoLogger 会话,请将此值设置为 1;否则,请将此值设置为 0。
地位 REG_DWORD AutoLogger 的启动状态。 如果 AutoLogger 无法启动,则此键的值是相应的 Win32 错误代码。 如果 AutoLogger 已成功启动,则此键的值 ERROR_SUCCESS (0)。
靴子 REG_DWORD 此功能不应在调试方案之外使用。
如果此注册表项设置为 1,则自动记录程序将在内核初始化期间早于正常启动,从而允许它在初始化许多重要内核子系统期间捕获事件。 但是, 启用此选项会对启动时间产生负面影响 ,并对自动记录程序施加额外的限制。 如果启用此功能,必须填充自动记录器会话 GUID,许多其他自动记录器设置可能无法正常工作。
Windows Server 2022 及更高版本支持此密钥。

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

价值 类型 DESCRIPTION
已启用 REG_DWORD 判断提供程序是否已启用。 若要启用提供程序,请将此值设置为 1。 若要禁用提供程序,请将此值设置为 0。 默认值为 0。
EnableFlags REG_DWORD 提供程序定义的值,用于指定生成事件的事件类。 有关详细信息,请参阅 EnableTrace 函数的 EnableFlags 参数。 如果提供程序不支持 MatchAnyKeywordMatchAllKeyword,请指定此值名称。
EnableLevel REG_DWORD 提供程序定义的值,该值指定事件中包含的详细信息级别。 例如,可以使用此值来指示提供程序生成的事件(信息性、警告、错误)的严重性级别。 有关预定义级别的列表,请参阅 EnableTraceEx 函数的级别参数。
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) = 筛选掉未指定非零关键字的所有事件。
  • 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 用于确定要由提供者写入的事件类别的关键字位掩码。 如果事件的任何关键字位与此掩码中设置的任何位匹配,提供程序将写入该事件。 若要指定提供程序写入所有事件,请将此值设置为零。 有关示例,请参阅 EnableTraceEx 函数的“备注”部分。
MatchAllKeyword REG_QWORD 此位掩码是可选的。 此掩码进一步限制希望提供程序写入的事件类别。 如果事件的关键字满足 MatchAnyKeyword 条件,则仅当事件关键字中存在此掩码中的所有位时,提供程序才会写入该事件。 如果 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

更新事件跟踪会话