EVENT_DATA_DESCRIPTOR 구조체(evntprov.h)
EVENT_DATA_DESCRIPTOR 구조체는 ETW 이벤트에 사용될 데이터 블록을 정의합니다.
이 구조체는 일반적으로 EventDataDescCreate 함수를 사용하여 초기화됩니다.
구문
typedef struct _EVENT_DATA_DESCRIPTOR {
ULONGLONG Ptr;
ULONG Size;
union {
ULONG Reserved;
struct {
UCHAR Type;
UCHAR Reserved1;
USHORT Reserved2;
} DUMMYSTRUCTNAME;
} DUMMYUNIONNAME;
} EVENT_DATA_DESCRIPTOR, *PEVENT_DATA_DESCRIPTOR;
멤버
Ptr
데이터에 대한 포인터입니다.
중요
32비트 및 64비트 아키텍처 모두에서 64비트 부호 없는 정수 값입니다. 이 값을 올바르게 설정하려면 데이터 포인터를 필드에 EventDataDescriptor.Ptr = (UINT_PTR)dataPointer;
할당 Ptr
하기 전에 부호 없는 정수로 캐스팅하거나 EventDataDescCreate 함수를 사용합니다.
Size
데이터의 크기(바이트)입니다.
DUMMYUNIONNAME
DUMMYUNIONNAME.Reserved
DUMMYUNIONNAME.DUMMYSTRUCTNAME
DUMMYUNIONNAME.DUMMYSTRUCTNAME.Type
이벤트에서 이 데이터의 사용을 지정합니다. 다음 값 중 하나일 수 있습니다.
EVENT_DATA_DESCRIPTOR_TYPE_NONE (0)
일반 이벤트 데이터입니다.
EVENT_DATA_DESCRIPTOR_TYPE_EVENT_METADATA (1)
TraceLogging 이벤트 디코딩 정보입니다.
EVENT_DATA_DESCRIPTOR_TYPE_PROVIDER_METADATA (2)
수동으로 연결된 공급자 특성입니다. EventSetInformation을 통해 공급자 특성 연결을 지원하지 않는 운영 체제에서 사용할 수 있습니다. 공급자 특성이 를 통해
EventSetInformation
구성된 경우 이 데이터는 무시됩니다.EVENT_DATA_DESCRIPTOR_TYPE_TIMESTAMP_OVERRIDE (3)
64비트 이벤트 타임스탬프 재정의. 다시 로깅할 때 사용합니다. 타임스탬프 순서에서 이벤트를 로깅하면 추적 처리 중에 이벤트 순서 문제가 발생할 수 있습니다.
이벤트 공급자가 또는 EventProviderUseDescriptorType
작업을 사용하여 EventSetInformation API EventProviderSetTraits
를 호출하여 필드를 존중 Type
하도록 구성되지 않은 한 이 필드는 무시됩니다.
DUMMYUNIONNAME.DUMMYSTRUCTNAME.Reserved1
사용되지 않습니다. 0으로 설정합니다.
DUMMYUNIONNAME.DUMMYSTRUCTNAME.Reserved2
사용되지 않습니다. 0으로 설정합니다.
설명
대부분의 이벤트 공급자는 EventDataDescCreate를 직접 호출하지 않습니다. 대신 대부분의 이벤트 공급자는 EventRegister, EventWrite 및 EventUnregister에 대한 호출을 래핑하는 ETW 프레임워크를 사용하여 구현됩니다. 예를 들어 이벤트 매니페스트를 작성한 다음 메시지 컴파일러 를 사용하여 이벤트에 대한 C/C++ 코드를 생성하거나 TraceLogging 을 사용하여 매니페스트가 필요하지 않을 수 있습니다.
이벤트 데이터가 포함된 이벤트를 작성하려면 EVENT_DATA_DESCRIPTOR 구조 배열(데이터의 각 청크에 대해 하나의 요소)을 만들고 EventDataDescCreate 함수를 호출하여 이벤트에 포함할 데이터로 각 요소를 초기화합니다. 그런 다음 이 배열을 EventWrite 에 전달하여 데이터를 이벤트에 포함합니다. 예제는 매니페스트 기반 이벤트 작성을 참조하세요.
이벤트에 기록된 데이터는 함수에 전달된 EVENT_DATA_DESCRIPTOR 구조체에서 참조하는 데이터 청크의 연결입니다 EventWrite
. 이 연결은 패딩을 포함하지 않으며 원래 데이터 청크 집합의 경계 또는 크기 정보를 유지하지 않습니다.
ETW 이벤트의 총 크기(사용자가 제공한 데이터의 합계, EVENT_HEADER 및 이벤트에 필요할 수 있는 모든 EVENT_HEADER_EXTENDED_DATA_ITEM )는 64KB를 초과할 수 없습니다. 64KB보다 큰 이벤트는 ETW 런타임에 의해 삭제됩니다.
또한 추적 세션 버퍼에 맞지 않는 ETW 이벤트도 삭제됩니다. 각 버퍼에는 72 바이트 헤더가 있으므로 버퍼에 맞을 수 있는 가장 큰 이벤트는 버퍼의 크기보다 약간 작습니다. 예를 들어 32KB 버퍼를 사용하는 추적 세션은 32,696바이트보다 큰 이벤트를 수락할 수 없습니다(32,768바이트 버퍼에서 72바이트 헤더를 뺀 값은 이벤트에 32,696바이트 남음).
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows Vista [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows Server 2008 [데스크톱 앱만 해당] |
머리글 | evntprov.h |