Поделиться через


Квалификаторы трассировки событий MOF

Используйте квалификаторы, определенные в этом разделе, при создании класса MOF поставщикапоставщика, класса MOF события, класса MOF типа событияи свойства класса MOF типа события. Пример, включающий некоторые из этих квалификаторов, см. в разделе публикации схемы событий.

Квалификаторы классов MOF поставщика

В следующей таблице перечислены квалификаторы, которые можно указать в классе MOF поставщика.

Квалификатор Тип данных Описание
Guid строка Обязательно. Строковый guid, который однозначно идентифицирует поставщика. Например, Guid("{3F92E6E0-9886-434e-85DB-0D11D3904C0A}"). Это тот же GUID, который вы используете при вызове функции RegisterTraceGuids для регистрации поставщика.

 

Квалификаторы классов MOF событий

В следующей таблице перечислены квалификаторы, которые можно указать в классе событий (родительский класс, который группит связанные классы типов событий).

Квалификатор Тип данных Описание
Guid строка Обязательно. Строковый guid, определяющий класс событий. Например, Guid("{3F92E6E0-9886-434e-85DB-0D11D3904C0A}"). Поставщики событий используют guid для задания EVENT_TRACE_HEADER. Guid член, чтобы потребители могли определить класс событий, которые они получают.
EventVersion целочисленного Этот квалификатор является необязательным для последней версии класса трассировки событий и необходим для всех старых версий класса. Последняя версия класса либо не указывает квалификатор EventVersion или имеет самый высокий номер версии. Номера версий начинаются с 0, например EventVersion(0). Как правило, при создании новой версии класса также переименуйте предыдущую версию на <имя класса>_Vn, где n — добавочное число, начиная с 0. Пример см. в разделе FileIo и FileIo_V0.

 

Квалификаторы квалификаторов класса MOF типа события

В следующей таблице перечислены квалификаторы, которые можно указать в классе типа события (класс, определяющий данные свойства события).

Квалификатор Ценность Описание
EventType целочисленного Обязательно. Определяет класс типа события. Например, EventType(1). Поставщик событий использует то же значение типа события для задания EVENT_TRACE_HEADER. Class.Type. Если один и тот же класс MOF используется для нескольких типов событий (так как они используют одни и те же данные события), укажите значение типа события в виде массива целых чисел, например EventType{12,15}.
EventTypeName строка Необязательный. Описывает тип события. Например, EventTypeName("Start"). Если один и тот же класс MOF используется для нескольких типов событий (так как они используют одни и те же данные события), укажите значение имени типа события в виде массива строк, например EventTypeName{"Start", "End"}. Элементы массива EventTypeName соответствуют массиву EventType непосредственно массиву EventType.

 

Квалификаторы свойств

В следующей таблице перечислены квалификаторы, которые можно указать в свойстве.

Квалификатор Описание
BitMap Указывает битовые позиции, сопоставленные со строковыми значениями. Если указать этот квалификатор, необходимо также указать квалификатор BitValues.
BitValues Строковые значения. Если также указан квалификатор bitMap BitMap, строки соответствуют значениям в квалификаторе bitMap . В противном случае предположим, что значение свойства является одноуровневой индексом в строки значений (бит один соответствует первой строке в списке).
расширения Предоставляет дополнительные сведения об использовании (интерпретации) данных. Значение расширения не учитывает регистр. Включите значение в кавычки, например Extension("Guid"). Возможные значения расширения:
Guid
Указывает, что данные свойства — guid. Тип данных MOF должен быть объектом. Ожидается, что полезные данные будут структурой GUID.
IPAddr и IPAddrV4
Данные — это IP-адрес версии 4. Тип данных MOF должен быть объектом. Ожидается, что полезные данные будут незаписанными. Каждый байт без знака длинный представляет одну из четырех частей IP-адреса (p1.p2.p3.p4). Байт низкого порядка содержит значение p1, следующий байт содержит значение p2 и т. д.
До Windows Vista: расширение IPAddrV4 не поддерживается.
IPAddrV6
Данные — это IP-адрес версии 6. Тип данных MOF должен быть объектом. Ожидается, что полезные данные будут IN6_ADDR структурой.
До Windows Vista: расширение IPAddrV6 не поддерживается.
NoPrint
Указывает, что потребитель не должен печатать эти данные.
Порт
Данные определяют номер порта. Тип данных MOF должен быть объектом. Ожидается, что полезные данные будут неподписанными короткими.
RString
Символы новой строки были заменены пробелами. Ожидается, что полезные данные будут завершаться значением NULL, строка ANSI.
RWString
Символы новой строки были заменены пробелами. Ожидается, что полезные данные будут завершаться null, широкой символьной строкой.
Sid
Данные представляют собой двоичный идентификатор безопасности BLOB-объектов. Тип данных MOF должен быть объектом.
Идентификатор безопасности имеет переменную длину. Значение, содержащееся в первых 4-байтах (ULONG) указывает, содержит ли большой двоичный объект идентификатор безопасности. Если первые 4-байтовые (ULONG) большого двоичного объекта ненулево, большой двоичный объект содержит идентификатор БЕЗОПАСНОСТИ. Первая часть большого двоичного объекта содержит TOKEN_USER (структура выровнена по границе 8-байтов), а вторая часть содержит идентификатор БЕЗОПАСНОСТИ. Чтобы устранить часть идентификатора безопасности большого двоичного объекта, выполните следующие действия.
  • Задайте указатель байтов на начало большого двоичного объекта
  • Умножьте размер указателя для журнала событий на 2 и добавьте продукт в указатель байтов (элемент PointerSize элемента TRACE_LOGFILE_HEADER содержит значение размера указателя).

Чтобы определить длину идентификатора безопасности, можно использовать следующий макрос.
#define SeLengthSid( Sid ) \
  (8 + (4 * ((SID *)Sid)->SubAuthorityCount))
SizeT
Указывает, что свойство содержит значение указателя. Размер значения указателя зависит от операционной системы, используемой для регистрации события; Полезные данные будут содержать 4-байтовое значение для 32-разрядных систем или 8-байтовое значение для 64-разрядных систем. Тип данных MOF должен быть объектом.
Потребители должны игнорировать тип данных и квалификатор форматирования, если свойство включает расширение SizeT. Чтобы определить размер данных для чтения для свойства, используйте следующую команду:
До Windows Vista: Значение PointerSize может быть не точным. Например, на 64-разрядном компьютере 32-разрядное приложение будет записывать 4-байтовые указатели; однако сеанс установит PointerSize значение 8.
вариант
Данные представляют большой двоичный объект. Первые четыре байта (uint32) указывают размер большого двоичного объекта. Тип данных MOF должен быть объектом.
WmiTime
Преобразует метку времени в системное время. Тип данных MOF должен быть объектом. Ожидается, что полезные данные будут целыми числами без знака.
До Windows Vista: Недоступно.
Форматирование Определяет формат данных свойства. Например, включая Format("w") в строковом свойстве, указывает, что строка является широкой строкой. Возможные значения:
Срок Описание
c
Отображение значения свойства в виде символа ASCII. Этот квалификатор можно использовать с типами данных uint 8 uint8.
s
Обработайте массив символов как строку, завершаемую значением NULL. Строка представляет собой строку с широким символом, если тип данных char16; в противном случае строка представляет собой символьную строку ASCII.
w
Значение свойства — это строка расширенных символов. Этот квалификатор можно использовать с строковыми типами данных.
x
Отображение значения свойства в виде шестнадцатеричного числа. Этот квалификатор можно использовать с 16-, 32-разрядными и 64-разрядными целыми типами данных.

 

указателя

Указывает, что свойство содержит значение указателя. Размер значения указателя зависит от операционной системы, используемой для регистрации события; Полезные данные будут содержать 4-байтовое значение для 32-разрядных систем или 8-байтовое значение для 64-разрядных систем. Тип данных MOF должен быть объектом.

Потребители должны игнорировать тип данных и квалификатор форматирования, если свойство включает расширение SizeT. Чтобы определить размер данных для чтения для свойства, используйте следующую команду:

До Windows Vista: Значение PointerSize может быть не точным. Например, на 64-разрядном компьютере 32-разрядное приложение будет записывать 4-байтовые указатели; однако сеанс установит PointerSize значение 8.

Обратите внимание, что некоторые события используют PointerType вместо указателя; не используйте PointerType.

StringTermination Указывает, как завершается строковое свойство. Например, StringTermination("NullTerminated") указывает, что строковое свойство завершается значением NULL. Возможные значения:
counted

Длина строки внедрена в начало строки в виде значения USHORT.

NotCounted

Строка не завершается значением NULL, а длина строки не внедрена в начало строки. В этом случае строка должна быть последним элементом и занять все пространство до конца данных события.

NullTerminated

Строка завершается значением NULL. Если не указать квалификатор StringTermination, то предполагается, что строка будет завершена null.

обратный

Длина строки внедрена в начало строки в виде значения USHORT в формате big-endian.

ValueDescriptions Содержит описания каждого значения в квалификаторе значений. Функции TdhEnumerateProviderFieldInformation и функции TdhQueryProviderFieldInformation возвращают эти описания при попытке получить сведения о ключевом слове и уровне. Описания являются необязательными. Если вы не предоставляете описания, функции возвращают 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 и готовы к отображению без дальнейшего форматирования.

 

Указание уровня и включение значений флагов для поставщика

Чтобы документировать уровень и включить флаги, которые контроллер будет использовать для включения поставщика, включите свойства Level и Flags в класс MOF поставщика. Имена свойств Level и Flags чувствительны к регистру. Свойства должны включать квалификаторы значений и valueMap, которые указывают возможный уровень и включают значения флагов. ValueMap для значений флага включения должны быть битовыми (флагами). ValueDescriptions квалификатор является необязательным, но его следует использовать для предоставления описаний для каждого возможного значения. Описания используются, когда кто-то вызывает функции TdhEnumerateProviderFieldInformation и функции TdhQueryProviderFieldInformation, чтобы получить возможный уровень и включить значения флагов (ключевых слов) для поставщика.

Ниже показан класс поставщика, указывающий возможный уровень и включение значений флагов.

[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;
};