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, EventWriteEventUnregister에 대한 호출을 래핑하는 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

추가 정보

EVENT_HEADER

EVENT_HEADER_EXTENDED_DATA_ITEM

EventDataDescCreate

EventWrite

EventWriteTransfer

매니페스트 기반 이벤트 작성