다음을 통해 공유


EVENT_TRACE_HEADER 구조체(evntrace.h)

EVENT_TRACE_HEADER 구조에는 TraceEvent에서 작성한 모든 이벤트에 공통적인 표준 이벤트 추적 정보가 포함되어 있습니다.

구문

typedef struct _EVENT_TRACE_HEADER {
  USHORT        Size;
  union {
    USHORT FieldTypeFlags;
    struct {
      UCHAR HeaderType;
      UCHAR MarkerFlags;
    } DUMMYSTRUCTNAME;
  } DUMMYUNIONNAME;
  union {
    ULONG Version;
    struct {
      UCHAR  Type;
      UCHAR  Level;
      USHORT Version;
    } Class;
  } DUMMYUNIONNAME2;
  ULONG         ThreadId;
  ULONG         ProcessId;
  LARGE_INTEGER TimeStamp;
  union {
    GUID      Guid;
    ULONGLONG GuidPtr;
  } DUMMYUNIONNAME3;
  union {
    struct {
      ULONG KernelTime;
      ULONG UserTime;
    } DUMMYSTRUCTNAME;
    ULONG64 ProcessorTime;
    struct {
      ULONG ClientContext;
      ULONG Flags;
    } DUMMYSTRUCTNAME2;
  } DUMMYUNIONNAME4;
} EVENT_TRACE_HEADER, *PEVENT_TRACE_HEADER;

멤버

Size

이벤트의 총 바이트 수입니다. 크기에 는 헤더 구조의 크기와 헤더에 추가된 이벤트별 데이터의 크기가 포함됩니다.

입력 시 크기는 이벤트 추적 세션의 버퍼에서 72(0x48)를 뺀 크기보다 작아야 합니다.

출력에서 이 숫자를 계산에 사용하지 마세요.

DUMMYUNIONNAME

DUMMYUNIONNAME.FieldTypeFlags

예약되어 있습니다.

DUMMYUNIONNAME.DUMMYSTRUCTNAME

DUMMYUNIONNAME.DUMMYSTRUCTNAME.HeaderType

예약되어 있습니다.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.MarkerFlags

예약되어 있습니다.

DUMMYUNIONNAME2

DUMMYUNIONNAME2.Version

클래스 멤버의 롤업입니다. 하위 바이트에는 Type이 포함되고, 다음 바이트에는 Level이 포함되고, 마지막 두 바이트에는 버전이 포함됩니다.

DUMMYUNIONNAME2.Class

DUMMYUNIONNAME2.Class.Type

이벤트 유형입니다. 공급자는 자체 이벤트 형식을 정의하거나 다음 표에 나열된 미리 정의된 이벤트 형식을 사용할 수 있습니다.

  • EVENT_TRACE_TYPE_CHECKPOINT: 검사점 이벤트입니다. 활동의 시작 또는 끝에 있지 않은 이벤트에 사용합니다.

  • EVENT_TRACE_TYPE_DC_END: 데이터 수집 종료 이벤트입니다.

  • EVENT_TRACE_TYPE_DC_START: 데이터 수집 시작 이벤트입니다.

  • EVENT_TRACE_TYPE_DEQUEUE: 큐에 넣기 이벤트입니다. 작업이 시작되기 전에 큐에 대기할 때 사용합니다. EVENT_TRACE_TYPE_START 사용하여 작업 항목이 대기 중인 시간을 표시합니다. 큐에서 제거 이벤트 유형을 사용하여 항목에 대한 작업이 실제로 시작되는 시간을 표시합니다. EVENT_TRACE_TYPE_END 사용하여 항목에 대한 작업이 완료된 시간을 표시합니다.

  • EVENT_TRACE_TYPE_END: 이벤트를 종료합니다. 를 사용하여 다단계 이벤트의 최종 상태를 추적합니다.

  • EVENT_TRACE_TYPE_EXTENSION: 확장 이벤트입니다. 이전 이벤트의 연속인 이벤트에 사용합니다. 예를 들어 이벤트 추적이 세션 버퍼에 들어갈 수 있는 것보다 많은 데이터를 기록할 때 확장 이벤트 형식을 사용합니다.

  • EVENT_TRACE_TYPE_INFO: 정보 이벤트입니다. 기본 이벤트 유형입니다.

  • EVENT_TRACE_TYPE_REPLY: 회신 이벤트입니다. 리소스를 요청하는 애플리케이션이 여러 응답을 받을 수 있는 경우 를 사용합니다. 예를 들어 클라이언트 애플리케이션이 URL을 요청하고 웹 서버가 여러 파일을 전송하여 회신하는 경우 수신된 각 파일을 회신 이벤트로 표시할 수 있습니다.

  • EVENT_TRACE_TYPE_START: 이벤트를 시작합니다. 를 사용하여 다단계 이벤트의 초기 상태를 추적합니다.

고유한 이벤트 유형을 정의하는 경우 10부터 시작하는 숫자를 사용해야 합니다. 그러나 사용하려는 숫자를 사용할 수 있는 방법은 없습니다. 이벤트 추적 클래스 GUID가 여러 이벤트 형식을 지원하는 경우 소비자는 이벤트 유형을 사용하여 이벤트 및 해당 콘텐츠를 해석하는 방법을 결정합니다.

DUMMYUNIONNAME2.Class.Level

이벤트를 생성하는 데 사용되는 심각도 수준을 정의하는 공급자 정의 값입니다. 값 범위는 0에서 255까지입니다. 컨트롤러는 EnableTraceEx2 함수를 호출할 때 심각도 수준을 지정합니다. 공급자는 ControlCallback 구현에서 GetTraceEnableLevel 함수를 호출하여 심각도 수준을 검색합니다. 공급자는 값을 사용하여 이 멤버를 설정합니다.

ETW는 다음 심각도 수준을 정의합니다. 1보다 높은 수준을 선택하면 하위 수준에 대한 이벤트도 포함됩니다. 예를 들어 컨트롤러가 TRACE_LEVEL_WARNING(3)을 지정하는 경우 공급자는 TRACE_LEVEL_FATAL(1) 및 TRACE_LEVEL_ERROR(2) 이벤트도 생성합니다.

의미
TRACE_LEVEL_CRITICAL (1) 비정상적인 종료 또는 종료 이벤트
TRACE_LEVEL_ERROR (2) 심각한 오류 이벤트
TRACE_LEVEL_WARNING (3) 할당 오류와 같은 경고 이벤트
TRACE_LEVEL_INFORMATION (4) 항목 또는 종료 이벤트와 같은 오류 없는 이벤트
TRACE_LEVEL_VERBOSE (5) 자세한 추적 이벤트

DUMMYUNIONNAME2.Class.Version

이벤트를 기록하는 데 사용하는 이벤트 추적 클래스의 버전을 나타냅니다. 이벤트 추적 클래스의 버전이 하나만 있는 경우 0을 지정합니다. 버전은 소비자에게 이벤트 데이터를 해독하는 데 사용할 MOF 클래스를 알려줍니다.

ThreadId

출력에서 이벤트를 생성한 스레드를 식별합니다.

Windows 2000에서 ThreadIdULONGLONG 값이었습니다.

ProcessId

출력에서 은 이벤트를 생성한 프로세스를 식별합니다.

Windows 2000: 이 멤버는 지원되지 않습니다.

TimeStamp

출력에서 에는 이벤트가 발생한 시간이 포함됩니다. 해상도는 EVENT_TRACE_LOGFILEProcessTraceMode 멤버에 플래그가 포함되지 PROCESS_TRACE_MODE_RAW_TIMESTAMP 않는 한 시스템 시간입니다. 이 경우 확인은 컨트롤러가 세션을 만들 때 EVENT_TRACE_PROPERTIESWnode.ClientContext 멤버의 값에 따라 달라집니다.

DUMMYUNIONNAME3

DUMMYUNIONNAME3.Guid

이벤트 추적 클래스 GUID입니다. 클래스 GUID를 사용하여 이벤트 범주를 식별하고 Class.Type 멤버를 사용하여 이벤트 범주 내에서 이벤트를 식별할 수 있습니다.

또는 GuidPtr 멤버를 사용하여 클래스 GUID를 지정할 수 있습니다.

Windows XP 및 Windows 2000: 클래스 GUID는 RegisterTraceGuids 함수를 사용하여 이전에 등록되어 있어야 합니다.

DUMMYUNIONNAME3.GuidPtr

이벤트 추적 클래스 GUID에 대한 포인터입니다. 또는 Guid 멤버를 사용하여 클래스 GUID를 지정할 수 있습니다.

이벤트가 작성되면 ETW는 포인터를 사용하여 GUID를 이벤트에 복사합니다(GUID는 포인터가 아닌 이벤트에 포함됨).

이 멤버를 사용하는 경우 Flags 멤버에도 WNODE_FLAG_USE_GUID_PTR 포함되어야 합니다.

DUMMYUNIONNAME4

DUMMYUNIONNAME4.DUMMYSTRUCTNAME

DUMMYUNIONNAME4.DUMMYSTRUCTNAME.KernelTime

커널 모드 명령의 실행 시간이 CPU 시간 단위로 경과되었습니다. 프라이빗 세션을 사용하는 경우 ProcessorTime 멤버의 값을 대신 사용합니다. 자세한 내용은 설명 부분을 참조하세요.

DUMMYUNIONNAME4.DUMMYSTRUCTNAME.UserTime

CPU 시간 단위의 사용자 모드 지침에 대한 실행 시간이 경과되었습니다. 프라이빗 세션을 사용하는 경우 ProcessorTime 멤버의 값을 대신 사용합니다. 자세한 내용은 설명 부분을 참조하세요.

DUMMYUNIONNAME4.ProcessorTime

프라이빗 세션의 경우 CPU 틱에서 사용자 모드 지침에 대한 경과된 실행 시간입니다.

DUMMYUNIONNAME4.DUMMYSTRUCTNAME2

DUMMYUNIONNAME4.DUMMYSTRUCTNAME2.ClientContext

예약되어 있습니다.

DUMMYUNIONNAME4.DUMMYSTRUCTNAME2.Flags

이 멤버를 WNODE_FLAG_TRACED_GUID 설정해야 하며 필요에 따라 다음의 조합을 지정할 수 있습니다.

  • WNODE_FLAG_USE_GUID_PTR: GuidPtr 멤버에 클래스 GUID가 포함되어 있는지 여부를 지정합니다.

  • WNODE_FLAG_USE_MOF_PTR: MOF_FIELD 구조체 배열에 이 구조체에 추가된 이벤트 데이터가 포함되어 있는지 지정합니다. 배열의 요소 수는 MAX_MOF_FIELDS 제한됩니다.

설명

멤버를 설정하기 전에 이 구조체의 메모리를 0으로 초기화해야 합니다.

KernelTimeUserTime 멤버를 사용하여 지침 집합에 대한 CPU 비용을 단위로 확인할 수 있습니다(값은 로깅 시 해당 스레드에 청구된 CPU 사용량을 나타냅니다). 예를 들어 이벤트 A와 이벤트 B가 동일한 스레드에 의해 연속적으로 기록되고 CPU 사용량 번호가 150과 175인 경우 이벤트 A와 B 간에 해당 스레드에서 수행한 작업은 25 CPU 시간 단위(175 – 150)의 비용이 듭니다.

TRACE_LOGFILE_HEADER 구조의 TimerResolution에는 CPU 사용량 타이머의 해상도가 100나노초 단위로 포함되어 있습니다. 커널 시간 및 사용자 시간 값과 함께 타이머 해상도를 사용하여 명령 집합이 사용한 CPU 시간을 확인할 수 있습니다. 예를 들어 타이머 해상도가 156,250인 경우 25개의 CPU 시간 단위는 0.39초(156,250 * 25 * 100/1,000,000,000)입니다. 이는 이벤트 A와 B 간의 지침 집합에서 사용하는 CPU 시간(경과된 벽 클록 시간이 아님)입니다.

그러나 CPU 사용량 타이머 해상도는 일반적으로 매우 낮습니다(약 10밀리초 이상). 따라서 CPU 사용량 번호는 높은 정확도로 스레드 간의 CPU 시간 사용량을 고려하기 위해 사용할 수 없습니다. 오히려 장기적인 통계적 분석 유형에 적합합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
머리글 evntrace.h

추가 정보

EVENT_TRACE

EventCallback

TraceEvent