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

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

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

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

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

 

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

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

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

 

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

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

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

 

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

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

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

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

 

Указатель

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

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

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

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

StringTermination Указывает, как завершается строковое свойство. Например, StringTermination("NullTerminated") указывает, что строковое свойство завершается null. Возможны следующие значения:
Расценено

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

NotCounted

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

NullTerminated

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

ReverseCounted

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

Описания значений Предоставляет описания для каждого значения в квалификаторе Значений . Функции TdhEnumerateProviderFieldInformation и TdhQueryProviderFieldInformation возвращают эти описания при попытке получить ключевое слово и сведения об уровне. Описания являются необязательными. Если не указать описания, функции возвращают значение NULL. Дополнительные сведения см . в статье Указание значений уровней и включение флагов для поставщика .
ValueMap Задает целочисленные значения индекса или флага, которые сопоставляют со строковыми значениями. При указании этого квалификатора необходимо также указать квалификатор Values и при необходимости квалификатор ValueType . Обратите внимание, что трассировка событий Windows не поддерживает параметр 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 чувствительны к регистру. Свойства должны включать квалификаторы Values и 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;
};