INF AddAutoLogger 和 UpdateAutoLogger 指令
AddAutoLogger 和 UpdateAutoLogger 指令在 INF DDInstall 中使用。“事件”部分。 它们指定 Windows (ETW) 自动记录器会话的特征,这些会话记录操作系统启动过程中早期发生的事件。 从 Windows 11 开始支持这些指令。
[DDInstall.Events]
AddAutoLogger=session-name,{SessionGUID},add-autologger-install-section
UpdateAutoLogger=session-name,update-autologger-install-section
...
项
session-name
指定要添加的 AutoLogger 会话的名称。 此名称在计算机上的一组 AutoLogger 会话中必须是唯一的。 建议会话名称包含公司名称或公司名称的缩写,以免与其他公司的会话名称冲突。
SessionGUID
指定标识 AutoLogger 会话的 GUID 值。 这可以表示为窗体{nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn}
的显式 GUID 值,也可以表示为 INF 文件的 Strings 节中定义的 {nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn}
%strkey% 标记。
add-autologger-install-section
引用 INF 编写器定义的节,该节包含用于注册自动记录器的信息。 有关详细信息,请参阅以下 “备注” 部分。
update-autologger-install-section
引用 INF 编写器定义的节,该节包含用于将提供程序添加到现有 AutoLogger 的信息。 有关详细信息,请参阅以下 “备注” 部分。
注解
有关 AutoLogger 的详细信息,请参阅 配置和启动 AutoLogger 会话。
INF 编写器创建的每个节名称在 INF 文件中必须唯一,并且必须遵循定义节名称的一般规则。 有关这些规则的详细信息,请参阅 INF 文件的一般语法规则。
AddAutoLogger 指令必须引用 INF 文件中其他位置的名称 add-autologger-install-section。 每个部分具有以下形式:
[add-autologger-install-section]
Start=<0 | 1>
[BufferSize=buffer-size]
[ClockType=clock-type]
[DisableRealtimePersistence= <0 | 1>]
[FileName=path-to-file]
[FileMax=file-max]
[FlushTimer=flush-timer]
[LogFileMode=log-file-mode]
[MaxFileSize=max-file-size]
[MaximumBuffers=max-buffers]
[MinimumBuffers=min-buffers]
(AddAutoLoggerProvider={ProviderGUID},autologger-provider-install-section)
…
每个 add-autologger-install-section 都必须提供 Start。 (可选)使用 AddAutoLoggerProvider 为 AutoLogger 指定一个或多个 AutoLogger 提供程序,每个提供程序在单独的行上。 有关 INF 文件中的 AutoLogger 提供程序的详细信息,请参阅下面的 添加 AutoLogger 提供程序 。
UpdateAutoLogger 指令必须引用 INF 文件中的其他位置命名的 update-autologger-install-section。 每个此类部分具有以下形式:
[update-autologger-install-section]
(AddAutoLoggerProvider={ProviderGUID},autologger-provider-install-section)
…
每个 update-autologger-install-section 都可以使用 AddAutoLoggerProvider 指定一个或多个 AutoLogger 提供程序,每个提供程序在单独的行上。 有关 INF 文件中的 AutoLogger 提供程序的详细信息,请参阅下面的 添加 AutoLogger 提供程序 。
Add-AutoLogger-Install-Section 条目和值
开始=0 | 1
指定下次重启计算机时是否将启动自动记录器。 若要启动自动记录器,请将此值设置为 1,否则将此值设置为 0。
BufferSize=buffer-size
(可选)指定每个缓冲区的大小(以 KB 为单位)。
BufferSize 应小于 1 MB。 如果未设置此值,ETW 将使用物理内存的大小来计算此值。
ClockType=clock-type
(可选)指定使用以下数值记录每个事件的时间戳时使用的计时器,这些数值以十进制表示法表示,或者用十六进制表示法表示,如以下列表所示。 如果省略,则默认 0x1 (性能 计数器值) 。
0x1 (性能计数器值)
0x2 (系统计时器)
0x3 (CPU 周期计数器)
有关每种时钟类型的说明,请参阅 WNODE_HEADER 的 ClientContext 成员。
DisableRealtimePersistence=0 | 1
(可选)允许通过将值设置为 1 来禁用实时持久性。 默认值为 0 (启用) 。 如果启用了实时持久性,则计算机关闭时未传递的实时事件将持久保存。 然后,当使用者下次连接到会话时,事件将传送给使用者。
文件名=file-name
(可选)指定日志文件的完全限定路径。 如果路径不存在,则首次启动自动记录器时将尽力创建。
FileName 的长度限制为 1024 个字符。 该文件是顺序日志文件。 默认文件路径为 %DriverData%\<SessionName.etl>。
FileMax=file-max
(可选)指定 ETW 创建的日志文件的最大实例数。 创建最大文件数后,ETW 会覆盖第一个文件(如果存在)。 支持的日志文件的最大实例数为 16。 请勿将此功能与 EVENT_TRACE_FILE_MODE_NEWLINE LogFileMode 一起使用。
FlushTimer=flush-timer
(可选)指定强制刷新跟踪缓冲区的频率(以秒为单位)。 最小刷新时间为 1 秒。 默认值为 0。 默认情况下,仅当缓冲区已满时才刷新缓冲区。
LogFileMode=log-file-mode
(可选)指定一个或多个日志模式。 有关可能的值,请参阅 日志记录模式常量。 默认值为 0x1 (EVENT_TRACE_FILE_MODE_SEQUENTIAL) 。
MaxFileSize=max-file-size
(可选)指定日志文件的最大文件大小(以 MB 为单位)。 除非在 LogFileMode 中指定了EVENT_TRACE_FILE_MODE_CIRCULAR,否则会话在达到最大大小时关闭。 若要指定无限制,请将值设置为 0。 默认值为 100 mb。 达到最大文件大小时发生的行为取决于 LogFileMode 的值。
MaximumBuffers=maximum-buffers
(可选)指定要分配的最大缓冲区数,通常为最小缓冲区数加 20。 此值必须大于或等于 MinimumBuffers 的值。
MinimumBuffers=minimum-buffers
(可选)指定要在启动时分配的最小缓冲区数。 可以指定的缓冲区的最小数目为每个处理器两个缓冲区。
AddAutoLoggerProvider={ProviderGUID},autologger-provider-install-section
(可选)指定具有子指令的提供程序,该子指令引用 INF 文件中其他位置的 INF 编写器定义的 autologger-provider-install-section。 有关详细信息,请参阅以下 添加 AutoLogger 提供程序 部分。
添加 AutoLogger 提供程序
在 add-autologger-install-section 和 update-autologger-install-section 部分中,可以使用 AddAutoLoggerProvider 指令指定要在会话中启用的提供程序。
ProviderGUID 必须是标识 AutoLogger 提供程序的 GUID 值。 这可以表示为形式为 {nnnnnnnn-nnnn-nnnn-nnnn-nnnn-nnnnnnnnnn} 形式的显式 GUID 值,或表示为 INF 文件的 Strings 节中为 {nnnnnn-nnnn-nnnn-nn-nnnn}定义的 %strkey% 标记。
AddAutoLoggerProvider 子指令还必须引用文件中其他位置的 autologger-provider-install-section 。 每个此类部分具有以下形式:
[autologger-provider-install-section]
[Enabled=<0 | 1>]
[EnableFlags=enable-flags]
[EnableLevel=enable-level]
[EnablePropety=enable-property]
[MatchAnyKeyword=match-any-keyword]
[MatchAllKeyword=match-all-keyword]
AutoLogger-Provider-Install-Section 条目和值
启用=0 | 1
(可选)提供是否启用提供程序。 若要启用提供程序,请将此值设置为 1。 若要禁用,请将值设置为 0。 默认值为 0。
EnableFlags=enable-flags
(可选)指定提供程序为其生成事件的事件的类。 有关详细信息,请参阅 EnableTraceEx 函数的 EnableFlags 参数。 如果提供程序不支持 MatchAnyKeyword 或 MatchAllKeyword,请指定此值名称。
EnableLevel=enable-level
(可选)提供事件中包含的详细信息级别。 有关预定义级别的列表,请参阅 EnableTraceEx 函数的 Level 参数。
EnableProperty=enable-property
(可选)在日志文件中包含以下一个或多个项:
0x00000001 (EVENT_ENABLE_PROPERTY_SID) = 在扩展数据中包括用户的安全标识符 (SID) 。
0x00000002 (EVENT_ENABLE_PROPERTY_TS_ID) = 在扩展数据中包括终端会话标识符。
0x00000004 (EVENT_ENABLE_PROPERTY_STACK_TRACE) = 在扩展数据中包含使用 EventWrite 写入的事件的调用堆栈跟踪。
0x00000010 (EVENT_ENABLE_PROPERTY_IGNORE_KEYWORD_0) = 筛选掉未指定非零关键字 (keyword) 的所有事件。
0x00000020 (EVENT_ENABLE_PROPERTY_PROVIDER_GROUP) = 指示对 EnableTraceEx2 的此调用应启用 提供程序组 而不是单个事件提供程序。
0x00000080 (EVENT_ENABLE_PROPERTY_PROCESS_START_KEY) = 在扩展数据中包含进程启动键。
0x00000100 (EVENT_ENABLE_PROPERTY_EVENT_KEY) = 在扩展数据中包含事件键。
0x00000200 (EVENT_ENABLE_PROPERTY_EXCLUDE_INPRIVATE) = 筛选出标记为 InPrivate 事件或来自标记为 InPrivate 的进程的所有事件。
MatchAnyKeyword=match-any-关键字 (keyword)
(可选)提供关键字的位掩码,用于确定你希望提供程序写入的事件类别。 如果事件的任何关键字 (keyword) 位与此掩码中设置的任何位匹配,提供程序将写入事件。 若要指定提供程序写入所有事件,请将此值设置为零。 有关示例,请参阅 EnableTraceEx 函数的“备注”部分。
MatchAllKeyword=match-all-关键字 (keyword)
(可选)限制希望提供程序写入的事件类别。 如果事件的关键字 (keyword) 满足 MatchAnyKeyword 条件,则仅当事件关键字 (keyword) 中存在此掩码中的所有位时,提供程序才会写入事件。 如果 MatchAnyKeyword 为零,则不使用此掩码。 有关示例,请参阅 EnableTraceEx 函数的“备注”部分。
示例
[Contoso_Add_AutoLogger_Inst]
Start = 1
FileName = %%DriverData%%\Contoso\AutoLoggerLogFile.etl
AddAutoLoggerProvider = {4b8b1947-ae4d-54e2-826a-1aee78ef05b2}, Contoso_Provider_1_Inst
[Contoso_Update_AutoLogger_Inst]
AddAutoLoggerProvider= {a55d5a23-1a5b-580a-2be5-d7188f43fae1}, Contoso_Provider_2_Inst
[Contoso_Provider_1_Inst]
Enabled = 1
EnableProperty = 0x00000001
[Contoso_Provider_2_Inst]
Enabled = 1
传统兼容性
从 Windows 11 开始支持 AddAutoLogger 和 UpdateAutoLogger 指令。 若要在下层 OS 上配置 AutoLogger,请使用 AddReg 指令。
[Contoso_AutoLogger_AddReg]
HKLM,SYSTEM\CurrentControlSet\Control\WMI\Autologger\<autologger-session-name>,Start,0x00010001,1
HKLM,SYSTEM\CurrentControlSet\Control\WMI\Autologger\<autologger-session-name>,GUID,,{autologger-guid}
HKLM,SYSTEM\CurrentControlSet\Control\WMI\Autologger\<autologger-session-name>\{autologger-provider-guid},Enabled,0x00010001,1