事件跟踪 MOF 限定符

创建提供程序 MOF 类、事件 MOF 类事件类型 MOF事件类型 MOF 类的属性时,请使用本节中定义的限定符。 有关包含其中一些限定符的示例,请参阅 发布事件架构

提供程序 MOF 类限定符

下表列出了可以在提供程序 MOF 类上指定的限定符。

限定符 数据类型 说明
Guid 字符串 必需。 唯一标识提供程序的字符串 Guid。 例如,Guid (“{3F92E6E0-9886-434e-85DB-0D11D3904C0A}”) 。 这与调用 RegisterTraceGuids 函数以注册提供程序时使用的 GUID 相同。

 

事件 MOF 类限定符

下表列出了可以对事件类指定的限定符, () 对相关事件类型类进行分组的父类。

限定符 数据类型 说明
Guid 字符串 必需。 标识事件类的字符串 Guid。 例如,Guid (“{3F92E6E0-9886-434e-85DB-0D11D3904C0A}”) 。 事件提供程序使用 Guid 设置 EVENT_TRACE_HEADER。Guid 成员,以便使用者可以确定他们收到的事件的类。
EventVersion 整数 对于事件跟踪类的最新版本,此限定符是可选的,对于该类的所有旧版本是必需的。 类的最新版本未指定 EventVersion 限定符或具有最高版本号。 版本号以 0 开头,例如 EventVersion (0) 。通常,在创建类的新版本时,还会将以前的版本重命名为 <classname>_Vn,其中 n 是从 0 开始的增量数字。 有关示例,请参阅 FileIoFileIo_V0

 

事件类型 MOF 类限定符

下表列出了可以在事件类型类上指定的限定符 (定义事件属性数据的类) 。

限定符 说明
EventType 整数 必需。 标识事件类型类。 例如,EventType (1) 。 事件提供程序使用相同的事件类型值来设置 EVENT_TRACE_HEADER。Class.Type。 如果同一 MOF 类用于多个事件类型 (因为它们使用相同的事件数据) ,请将事件类型值指定为整数数组,例如 EventType{12,15}。
EventTypeName 字符串 可选。 描述事件类型。 例如,EventTypeName (“Start”) 。 如果同一 MOF 类用于多个事件类型 (因为它们使用相同的事件数据) ,请将事件类型名称值指定为字符串数组,例如 EventTypeName{“Start”、“End”}。 EventTypeName 数组的元素直接对应于 EventType 数组。

 

属性限定符

下表列出了可以对属性指定的限定符。

限定符 说明
位图 指定映射到字符串值的位位置。 如果指定此限定符,还必须指定 BitValues 限定符。
BitValues 字符串值。 如果还指定 了 BitMap 限定符,则字符串直接对应于 BitMap 限定符中的值。 否则,假设属性值是值字符串中的一个从 1 开始的索引, (位 1 对应于列表中的第一个字符串) 。
扩展名 提供有关如何使用 (解释) 数据的其他信息。 扩展值不区分大小写。 在引号中包括值,例如 Extension (“Guid”) 。 可能的扩展值为:
Guid
指示属性数据是 Guid。 MOF 数据类型必须是 对象。 有效负载应为 GUID 结构。
IPAddr 和 IPAddrV4
数据是 IP V4 地址。 MOF 数据类型必须是 对象。 有效负载应为无符号长。 无符号长的每个字节表示 IP 地址 (p1.p2.p3.p4) 的四个部分之一。 低序字节包含 p1 的值,下一个字节包含 p2 的值,依序排列。
在 Windows Vista 之前: 不支持 IPAddrV4 扩展。
IPAddrV6
数据是 IP V6 地址。 MOF 数据类型必须是 对象。 有效负载应为 IN6_ADDR 结构。
在 Windows Vista 之前: 不支持 IPAddrV6 扩展。
NoPrint
指示使用者不应打印此数据。
港口
数据标识端口号。 MOF 数据类型必须是 对象。 有效负载应为无符号短。
RString
换行符已替换为空格。 有效负载应为以 null 结尾的 ANSI 字符串。
RWString
换行符已替换为空格。 有效负载应为以 null 结尾的宽字符字符串。
数据表示二进制 Blob SID。 MOF 数据类型必须是 对象
SID 的长度可变。 前 4 个字节 (ULONG) 中包含的值指示 blob 是否包含 SID。 如果 blob 的前 4 个字节 (ULONG) 为非零,则 Blob 包含 SID。 blob 的第一部分包含TOKEN_USER (结构在 8 字节边界上对齐) 第二部分包含 SID。 若要寻址 Blob 的 SID 部分,请使用以下命令:
  • 设置指向 Blob 开头的字节指针
  • 将事件日志的指针大小乘以 2,并将积添加到字节指针 (TRACE_LOGFILE_HEADERPointerSize 成员包含指针大小值)

可以使用以下宏来确定 SID 的长度。
#define SeLengthSid( Sid ) \
  (8 + (4 * ((SID *)Sid)->SubAuthorityCount))
SizeT
指示 属性包含指针值。 指针值的大小取决于用于记录事件的操作系统;有效负载将包含 32 位系统的 4 字节值或 64 位系统的 8 字节值。 MOF 数据类型必须是 对象
如果属性包含 SizeT 扩展,则使用者应忽略数据类型和格式限定符。 若要确定要为属性读取的数据大小,请使用:
在 Windows Vista 之前:PointerSize 值可能不准确。 例如,在 64 位计算机上,32 位应用程序将记录 4 字节指针;但是,会话会将 PointerSize 设置为 8。
变异
数据表示 Blob。 uint32 (前四个字节) 指示 blob 的大小。 MOF 数据类型必须是 对象
WmiTime
将时间戳转换为系统时间。 MOF 数据类型必须是 对象。 有效负载应为无符号 64 位整数。
在 Windows Vista 之前: 不可用。
格式 定义属性数据的格式。 例如,在字符串属性上包括 Format (“w”) 表示字符串是宽字符串。 可能的值为:
术语 说明
c
将属性值显示为 ASCII 字符。 可以将此限定符用于 uint8 数据类型。
s
将字符数组视为以 null 结尾的字符串。 如果数据类型为 char16,则字符串为宽字符字符串;否则,字符串为 ASCII 字符串。
w
属性值是宽字符字符串。 可以将此限定符用于 字符串 数据类型。
x
将属性值显示为十六进制数。 可以将此限定符用于 16 位、32 位和 64 位整数数据类型。

 

指针

指示 属性包含指针值。 指针值的大小取决于用于记录事件的操作系统;有效负载将包含 32 位系统的 4 字节值或 64 位系统的 8 字节值。 MOF 数据类型必须是 对象

如果属性包含 SizeT 扩展,则使用者应忽略数据类型和格式限定符。 若要确定要为属性读取的数据大小,请使用:

在 Windows Vista 之前:PointerSize 值可能不准确。 例如,在 64 位计算机上,32 位应用程序将记录 4 字节指针;但是,会话会将 PointerSize 设置为 8。

请注意,某些事件使用 PointerType 而不是 Pointer;请勿使用 PointerType

StringTermination 指示字符串属性的终止方式。 例如,StringTermination (“NullTerminated”) 指示字符串属性以 null 结尾。 可能的值为:

字符串的长度作为 USHORT 值嵌入在字符串的开头。

NotCounted

字符串不是以 null 结尾的,字符串的长度不会嵌入到字符串的开头。 在这种情况下,字符串应为最后一个元素,并占用事件数据末尾的所有空间。

NullTerminated

字符串以 null 结尾。 如果未指定 StringTermination 限定符,则假定字符串以 null 结尾。

ReverseCounted

字符串的长度以 big-endian 格式作为 USHORT 值嵌入在字符串的开头。

ValueDescriptions 提供 限定符中每个值的说明。 当您尝试检索关键字 (keyword) 和级别信息时,TdhEnumerateProviderFieldInformationTdhQueryProviderFieldInformation 函数将返回这些说明。 说明是可选的。 如果未提供说明,函数将返回 NULL。 有关更多详细信息,请参阅 为提供程序指定级别和启用标志值
ValueMap 指定映射到字符串值的整数索引或标志值。 如果指定此限定符,则还必须指定 限定符和 ValueType 限定符(可选)。 请注意,ETW 不支持将字符串用于值映射值的 WMI 选项。

以下示例演示如何使用 ValueMap、Values 和 ValueType 限定符。

ValueType("flag"),
ValueMap {"0x01", "0x02", "0x04", "0x08"},
Values {"ValueMapFlag1", "ValueMapFlag2", "ValueMapFlag4", "ValueMapFlag8"}]
字符串值。 如果还指定了 ValueMap 限定符,则字符串直接与 ValueMap 限定符中的值相对应。 否则,假定属性值是值字符串中的从零开始的索引。
ValueType 指示 ValueMap 值是整数索引值还是位标志值。 如果不指定此限定符,则假定整数索引值。 若要指定值为整数索引值,请使用 ValueType (“index”) 。 若要指定值为位标志值,请使用 ValueType (“flag”) 。
WmiDataId 每个属性都必须包含 WmiDataId 限定符。 WmiDataId 定义使用者读取事件数据的顺序。 WmiDataId 的值从 1 开始,对类中的每个属性递增。 例如,WmiDataId (1) 。
XMLFragment 指示数据采用 XML 格式,并且无需进一步设置格式即可显示。

 

为提供程序指定级别并启用标志值

若要记录控制器用于启用提供程序的级别和启用标志,请在提供程序 MOF 类中包含“Level”和“Flags”属性。 Level 和 Flags 属性名称区分大小写。 属性必须包括 ValuesValueMap 限定符,它们指定可能的级别并启用标志值。 启用标志值的 ValueMap 必须是位 (标志) 值。 ValueDescriptions 限定符是可选的,但应使用它来提供每个可能值的说明。 当有人调用 TdhEnumerateProviderFieldInformationTdhQueryProviderFieldInformation 函数以获取可能的级别并启用标志 (关键字) 提供程序的值时,将使用说明。

下面显示了一个提供程序类,该类指定可能的级别并启用标志值。

[Dynamic,
 Description("IIS_Trace") : amended,
 guid("{3a2a4e84-4c21-4981-ae10-3fda0d9b0f83}"),
 locale("MS\\0x409")]
class IIS_Trace : EventTrace
{
    [Description ("Enable Flags") : amended,
        ValueDescriptions{
             "Allow_tracing_only_selected_requests ",
             "IIS_authentication_events ",
             "IIS_security_events ",
             "IIS_filter_events ",
             "IIS_static_file_events ",
             "IIS_CGI_events ",
             "IIS_compression_events ",
             "IIS_cache_events ",
             "IIS_request_notifications_events ",
             "IIS_module_events ",
             "IIS_FastCGI_events "},
        DefineValues{
             "UseUrlFilter",
             "IISAuthentication",
             "IISSecurity",
             "IISFilter",
             "IISStaticFile",
             "IISCGI",
             "IISCompression",
             "IISCache",
             "IISRequestNotification",
             "IISModule",
             "IISFastCGI"},
        Values{
             "UseUrlFilter",
             "IISAuthentication",
             "IISSecurity",
             "IISFilter",
             "IISStaticFile",
             "IISCGI",
             "IISCompression",
             "IISCache",
             "IISRequestNotification",
             "IISModule",
             "IISFastCGI"},
        ValueMap{
             "0x00000001",
             "0x00000002",
             "0x00000004",
             "0x00000008",
             "0x00000010",
             "0x00000020",
             "0x00000040",
             "0x00000080",
             "0x00000100",
             "0x00000200",
             "0x00001000"}: amended
    ]
    uint32 Flags;

    [Description ("Levels") : amended,
        ValueDescriptions{
            "Abnormal exit or termination",
            "Severe errors that need logging",
            "Warnings such as allocation failure",
            "Includes non-error cases",
            "Detailed traces from intermediate steps" } : amended,
         DefineValues{
            "TRACE_LEVEL_FATAL",
            "TRACE_LEVEL_ERROR",
            "TRACE_LEVEL_WARNING"
            "TRACE_LEVEL_INFORMATION",
            "TRACE_LEVEL_VERBOSE" },
        Values{
            "Fatal",
            "Error",
            "Warning",
            "Information",
            "Verbose" },
        ValueMap{
            "0x1",
            "0x2",
            "0x3",
            "0x4",
            "0x5" },
        ValueType("index")
    ]
    uint32 Level;
};