사용자 지정 데이터 형식을 정의하려면 어떻게 해야 합니까?
ETW(Windows 대한 이벤트 추적)는 추적 함수에 사용할 몇 가지 간단하고 복잡한 형식을 정의합니다. 이러한 형식은 Defaultwpp.ini 파일에 선언됩니다. 그러나 사용자 지정 데이터 형식을 직접 만들 수 있습니다.
변수를 선언하고 정수 대신 의미 있는 용어를 사용하여 변수 값을 설명하려는 경우 사용자 지정 데이터 형식을 사용합니다.
예를 들어 DiskState 변수는 디스크의 상태를 포함합니다. DiskState의 값은 다음과 같습니다.
DiskOffline = 0
DiskOnline = 1
DiskFailed = 2
DiskStalled = 3
추적 메시지에서 "DiskState=2"를 읽은 다음 2의 의미를 조회해야 하는 대신 DiskState라는 사용자 지정 형식을 정의하여 " DiskState가 실패했습니다."라는 추적 메시지를 가져올 수 있습니다.
사용자 지정 데이터 형식 만들기
사용자 지정 데이터 형식을 만들려면 다음 단계를 완료합니다.
localwpp.ini 같은 .ini 파일 이름 확장명을 가진 로컬 구성 파일을 만듭니다. 헤더 또는 원본 파일에 사용자 지정 형식을 추가할 수 없습니다.
TYPEMACRO 상수로 사용자 지정 데이터 형식을 정의합니다.
원본 또는 헤더 파일에서 구성 데이터를 식별합니다.
소스 파일의 RUN_WPP 매크로에 -ini 매개 변수를 추가합니다.
추적 메시지에서 사용자 지정 데이터 형식을 사용합니다.
TYPEMACRO 상수 정의
다음 형식의 TYPEMACRO 상수 정의 값은 문자열 목록으로 정의됩니다.
TYPEMACRO(Type,{ItemListLong | ItemListShort | ItemListByteShort | ItemListByteLong},(Value1,Value2...));
여기서
ItemListShort
부가된 16비트 정수입니다.
ItemListLong
부호 있거나 부호 없는 32비트 정수입니다.
ItemSetByteShort
서명된 16비트 비트 값입니다.
ItemSetByteLong
부호 있거나 서명되지 않은 32비트 비트 값입니다.
예를 들면 다음과 같습니다.
TYPEMACRO(DiskState,ItemListLong(DiskOffline,DiskOnline,DiskFailed,DiskStalled));
구성 데이터 식별
원본 파일 또는 헤더 파일과 같은 다른 코드가 있는 파일에 사용자 지정 데이터 형식을 추가한 경우 begin_wpp 구성 및 end_wpp 문을 사용하여 파일의 구성 데이터를 식별합니다. 예를 들면 다음과 같습니다.
// begin_wpp config
//TYPEMACRO(DiskState,ItemListLong(DiskOffline,DiskOnline,DiskFailed,DiskStalled));
// end_wpp
로컬 구성 파일에 사용자 지정 데이터 형식을 추가한 경우 begin_wpp 구성 및 end_wpp 문이 필요하지 않습니다.
-ini 매개 변수 추가
사용자 지정 형식에 대한 로컬 구성 파일을 만들 때 WPP 전처리기를 호출하는 RUN_WPP 문 에 -ini 매개 변수를 추가해야 합니다.
-ini 매개 변수는 ETW가 Defaultwpp.ini 사용하는 것 외에도 구성 파일(.ini)에서 구성 데이터를 검색하도록 지시합니다. 예를 들면 다음과 같습니다.
RUN_WPP -km -ini:localwpp.ini
중요
사용자 모드 애플리케이션 또는 DLL(동적 연결 라이브러리)에 대한 RUN_WPP 지시문에서 -km 스위치를 지정해서는 안 됩니다.
사용자 지정 데이터 형식 사용
사용자 지정 데이터 형식을 정의한 후 추적 메시지에서 사용할 수 있습니다. 형식 이름 앞에 백분율 기호(%)가 있고 느낌표(!)로 묶습니다. 예를 들어:
DoTraceMessage(INFO,"Disk State is %!diskstate!",DiskState);
결과 추적 메시지는 정의한 상수로 값을 나타냅니다.
DiskState is Offline.