이벤트 추적 MOF 한정자

공급자 MOF 클래스, 이벤트 MOF 클래스, 이벤트 형식 MOF 클래스 및 이벤트 형식 MOF 클래스의 속성을 만들 때 이 섹션에 정의된 한정자를 사용합니다. 이러한 한정자 중 일부를 포함하는 예제는 이벤트 스키마 게시를 참조하세요.

공급자 MOF 클래스 한정자

다음 표에서는 공급자 MOF 클래스에 지정할 수 있는 한정자를 나열합니다.

한정자 데이터 형식 설명
Guid String 필수 사항입니다. 공급자를 고유하게 식별하는 문자열 Guid입니다. 예를 들어 Guid("{3F92E6E0-9886-434e-85DB-0D11D3904C0A}")입니다. 이는 RegisterTraceGuids 함수를 호출하여 공급자를 등록할 때 사용하는 것과 동일한 GUID입니다.

 

이벤트 MOF 클래스 한정자

다음 표에서는 이벤트 클래스(관련 이벤트 형식 클래스를 그룹화한 부모 클래스)에서 지정할 수 있는 한정자를 나열합니다.

한정자 데이터 형식 Description
Guid String 필수 사항입니다. 이벤트 클래스를 식별하는 문자열 Guid입니다. 예를 들어 Guid("{3F92E6E0-9886-434e-85DB-0D11D3904C0A}")입니다. 이벤트 공급자는 Guid를 사용하여 EVENT_TRACE_HEADER 설정합니다. 소비자가 수신하는 이벤트의 클래스를 확인할 수 있도록 Guid 멤버입니다.
EventVersion 정수 이 한정자는 이벤트 추적 클래스의 최신 버전에 대해 선택 사항이며 모든 이전 버전의 클래스에 필요합니다. 최신 버전의 클래스는 EventVersion 한정자를 지정하지 않거나 버전 번호가 가장 높습니다. 버전 번호는 EventVersion(0)과 같이 0으로 시작합니다. 일반적으로 클래스의 새 버전을 만들 때 이전 버전의 <이름을 classname>_Vn로 바꿉니다. 여기서 n은 0부터 시작하는 증분 번호입니다. 예제는 FileIoFileIo_V0 참조하세요.

 

이벤트 유형 MOF 클래스 한정자

다음 표에서는 이벤트 형식 클래스(이벤트 속성 데이터를 정의하는 클래스)에서 지정할 수 있는 한정자를 나열합니다.

한정자 Description
EventType 정수 필수 사항입니다. 이벤트 유형 클래스를 식별합니다. 예를 들어 EventType(1)입니다. 이벤트 공급자는 동일한 이벤트 유형 값을 사용하여 EVENT_TRACE_HEADER 설정합니다. Class.Type. 동일한 MOF 클래스가 여러 이벤트 형식에 사용되는 경우(동일한 이벤트 데이터를 사용하기 때문에) 이벤트 형식 값을 정수 배열로 지정합니다(예: EventType){12,15}.
EventTypeName String 선택 사항입니다. 이벤트 유형을 설명합니다. 예를 들어 EventTypeName("Start")입니다. 동일한 MOF 클래스가 여러 이벤트 형식에 사용되는 경우(동일한 이벤트 데이터를 사용하기 때문에) 이벤트 형식 이름 값을 문자열 배열로 지정합니다(예: EventTypeName{"Start", "End"}). EventTypeName 배열의 요소는 EventType 배열에 직접 해당합니다.

 

속성 한정자

다음 표에서는 속성에 지정할 수 있는 한정자를 나열합니다.

한정자 Description
비트맵 문자열 값에 매핑되는 비트 위치를 지정합니다. 이 한정자를 지정하는 경우 BitValues 한정자도 지정해야 합니다.
BitValues 문자열 값입니다. BitMap 한정자도 지정되면 문자열은 BitMap 한정자의 값에 직접 해당합니다. 그렇지 않으면 속성 값이 값 문자열에 대한 1 기반 인덱스라고 가정합니다(비트 1은 목록의 첫 번째 문자열에 해당).
내선 번호 데이터를 사용(해석)하는 방법에 대한 추가 정보를 제공합니다. 확장 값은 대/소문자를 구분하지 않습니다. 값(예: Extension("Guid"))을 따옴표로 포함합니다. 가능한 확장 값은 다음과 같습니다.
Guid
속성 데이터가 Guid임을 나타냅니다. MOF 데이터 형식은 개체여야 합니다. 페이로드는 GUID 구조체여야 합니다.
IPAddr 및 IPAddrV4
데이터는 IP V4 주소입니다. MOF 데이터 형식은 개체여야 합니다. 페이로드는 서명되지 않은 길이로 예상됩니다. 서명되지 않은 long의 각 바이트는 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로 끝나는 와이드 문자열이어야 합니다.
Sid
데이터는 이진 Blob SID를 나타냅니다. MOF 데이터 형식은 개체여야 합니다.
SID는 가변 길이입니다. 처음 4바이트(ULONG)에 포함된 값은 Blob에 SID가 포함되어 있는지 여부를 나타냅니다. Blob의 처음 4바이트(ULONG)가 0이 아닌 경우 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을 나타냅니다. 처음 4바이트(uint32)는 Blob의 크기를 나타냅니다. MOF 데이터 형식은 개체여야 합니다.
WmiTime
타임스탬프를 시스템 시간으로 변환합니다. MOF 데이터 형식은 개체여야 합니다. 페이로드는 부호 없는 64비트 정수여야 합니다.
Windows Vista 이전: 사용할 수 없습니다.
형식 속성 데이터의 형식을 정의합니다. 예를 들어 문자열 속성에 Format("w")을 포함하면 문자열이 와이드 문자열임을 나타냅니다. 가능한 값은 다음과 같습니다.
용어 Description
c
속성 값을 ASCII 문자로 표시합니다. uint8 데이터 형식에서 이 한정자를 사용할 수 있습니다.
s
문자 배열을 null로 끝나는 문자열로 처리합니다. 데이터 형식이 char16인 경우 문자열은 와이드 문자열입니다. 그렇지 않으면 문자열은 ASCII 문자열입니다.
W
속성 값은 와이드 문자열입니다. 문자열 데이터 형식과 함께 이 한정자를 사용할 수 있습니다.
x
속성 값을 16진수로 표시합니다. 이 한정자는 16비트, 32비트 및 64비트 정수 데이터 형식과 함께 사용할 수 있습니다.

 

포인터

속성에 포인터 값이 포함되어 있음을 나타냅니다. 포인터 값의 크기는 이벤트를 기록하는 데 사용되는 운영 체제에 따라 달라집니다. 페이로드에는 32비트 시스템의 경우 4 바이트 값 또는 64비트 시스템의 8 바이트 값이 포함됩니다. MOF 데이터 형식은 개체여야 합니다.

속성에 SizeT 확장이 포함된 경우 소비자는 데이터 형식 및 형식 한정자를 무시해야 합니다. 속성에 대해 읽을 데이터의 크기를 확인하려면 다음을 사용합니다.

Windows Vista 이전:PointerSize 값이 정확하지 않을 수 있습니다. 예를 들어 64비트 컴퓨터에서 32비트 애플리케이션은 4비트 포인터를 기록합니다. 그러나 세션은 PointerSize 를 8로 설정합니다.

일부 이벤트는 Pointer 대신 PointerType 을 사용합니다 .PointerType을 사용하지 마세요.

StringTermination 문자열 속성이 종료되는 방법을 나타냅니다. 예를 들어 StringTermination("NullTerminated")은 문자열 속성이 null로 종료되었음을 나타냅니다. 가능한 값은 다음과 같습니다.
계산

문자열의 길이는 문자열의 시작 부분에 USHORT 값으로 포함됩니다.

NotCounted

문자열이 null로 종료되지 않고 문자열의 길이가 문자열의 시작 부분에 포함되지 않습니다. 이 경우 문자열은 마지막 요소여야 하며 이벤트 데이터의 끝에 있는 모든 공간을 차지해야 합니다.

NullTerminated

문자열이 null로 종료됩니다. StringTermination 한정자를 지정하지 않으면 문자열은 null로 종료된 것으로 간주됩니다.

ReverseCounted

문자열의 길이는 문자열의 시작 부분에 big-endian 형식의 USHORT 값으로 포함됩니다.

ValueDescriptions 한정자의 각 값에 대한 설명을 제공합니다. TdhEnumerateProviderFieldInformationTdhQueryProviderFieldInformation 함수는 키워드(keyword) 및 수준 정보를 검색하려고 할 때 이러한 설명을 반환합니다. 설명은 선택 사항입니다. 설명을 제공하지 않으면 함수는 NULL을 반환합니다. 자세한 내용은 공급자에 대한 수준 지정 및 플래그 값 사용을 참조하세요.
ValueMap 문자열 값에 매핑되는 정수 인덱스 또는 플래그 값을 지정합니다. 이 한정자를 지정하는 경우 한정자와 선택적으로 ValueType 한정자를 지정해야 합니다. ETW는 값 맵 값에 대한 문자열을 갖는 WMI 옵션을 지원하지 않습니다.

다음 예제에서는 ValueMap, 값 및 ValueType 한정자를 사용하는 방법을 보여 줍니다.

ValueType("flag"),
ValueMap {"0x01", "0x02", "0x04", "0x08"},
Values {"ValueMapFlag1", "ValueMapFlag2", "ValueMapFlag4", "ValueMapFlag8"}]
문자열 값입니다. ValueMap 한정자도 지정되면 문자열은 ValueMap 한정자의 값에 직접 해당합니다. 그렇지 않으면 속성 값이 값 문자열에 대한 인덱스(0부터 시작)라고 가정합니다.
ValueType ValueMap 값이 정수 인덱스 값인지 비트 플래그 값인지 여부를 나타냅니다. 이 한정자를 지정하지 않으면 정수 인덱스 값이 가정됩니다. 값이 정수 인덱스 값임을 지정하려면 ValueType("index")을 사용합니다. 값이 비트 플래그 값임을 지정하려면 ValueType("flag")을 사용합니다.
WmiDataId 각 속성에는 WmiDataId 한정자를 포함해야 합니다. WmiDataId 는 소비자가 이벤트 데이터를 읽는 순서를 정의합니다. WmiDataId 값은 1에서 시작하여 클래스의 각 속성에 대해 증가합니다. 예를 들어 WmiDataId(1)입니다.
XMLFragment 데이터가 XML 형식이며 추가 서식 없이 표시할 준비가 되었음을 나타냅니다.

 

공급자에 대한 수준 지정 및 플래그 값 사용

수준을 문서화하고 컨트롤러가 공급자를 사용하도록 설정하는 데 사용할 플래그를 사용하도록 설정하려면 공급자 MOF 클래스에 "Level" 및 "Flags" 속성을 포함합니다. Level 및 Flags 속성 이름은 대/소문자를 구분합니다. 속성에는 가능한 수준을 지정하고 플래그 값을 사용하도록 설정하는 ValueValueMap 한정자가 포함되어야 합니다. 사용 플래그 값의 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;
};