다음을 통해 공유


EtwWriteEx 함수(wdm.h)

EtwWriteEx 함수는 커널 모드 드라이버 코드에서 필터링을 지원하는 이벤트를 게시하기 위한 추적 함수입니다.

구문

NTSTATUS EtwWriteEx(
  [in]           REGHANDLE              RegHandle,
  [in]           PCEVENT_DESCRIPTOR     EventDescriptor,
  [in]           ULONG64                Filter,
  [in]           ULONG                  Flags,
  [in, optional] LPCGUID                ActivityId,
  [in, optional] LPCGUID                RelatedActivityId,
  [in]           ULONG                  UserDataCount,
  [in, optional] PEVENT_DATA_DESCRIPTOR UserData
);

매개 변수

[in] RegHandle

이벤트 공급자 등록에 성공하면 EtwRegister 함수에서 반환되는 이벤트 공급자 등록 핸들에 대한 포인터입니다.

[in] EventDescriptor

EVENT_DESCRIPTOR 구조체에 대한 포인터입니다.

[in] Filter

이벤트가 기록되지 않을 세션을 식별하는 instance 식별자입니다. 즉, 값은 로깅에서 제외해야 하는 세션의 마스크입니다(필터링됨). 비트 OR를 사용하여 여러 식별자를 지정합니다. 필터를 지원하지 않거나 이벤트가 모든 세션에 기록되는 경우(필터가 실패하지 않음) 0으로 설정합니다. 세션의 식별자를 가져오는 방법에 대한 자세한 내용은 EtwEnableCallback 콜백FilterData 매개 변수를 참조하세요.

[in] Flags

예약되어 있습니다. 0이어야 합니다.

[in, optional] ActivityId

이벤트와 연결된 활동을 나타내는 식별자입니다. ActivityID는 관련 이벤트를 그룹화할 수 있는 방법을 제공하며 엔드 투 엔드 추적에 사용됩니다. NULL인 경우 ETW는 스레드 로컬 스토리지에서 식별자를 가져옵니다. 이 식별자를 가져오는 자세한 내용은 EtwActivityIdControl을 참조하세요.

[in, optional] RelatedActivityId

이전 구성 요소에서 가져온 작업 식별자입니다. 이 매개 변수를 사용하여 구성 요소의 이벤트를 이전 구성 요소의 이벤트에 링크할 수 있습니다. 이전 구성 요소에 대해 설정된 활동 식별자를 얻으려면 EtwActivityIdControl 함수의 ControlCode 매개 변수에 대한 설명을 참조하세요.

[in] UserDataCount

UserData의 EVENT_DATA_DESCRIPTOR 구조체 수입니다. 최대 수는 128입니다.

[in, optional] UserData

EVENT_DATA_DESCRIPTOR 구조체의 배열에 대한 포인터입니다. UserDataCount가 0인 경우 이 매개 변수를 NULL로 설정합니다. 데이터는 매니페스트에 지정된 순서대로 배치되어야 합니다.

반환 값

성공하면 ERROR_SUCCESS 반환하거나 오류 발생시 다음 값 중 하나를 반환합니다.

설명

EtwWriteEx 함수는 사용자 모드 EventWriteEx 함수와 동일한 커널 모드입니다. 이 함수로 작성된 이벤트 데이터에는 매니페스트가 필요합니다. 매니페스트는 공급자에 포함되므로 소비자가 데이터를 사용할 수 있도록 공급자를 사용할 수 있어야 합니다. 게시하는 이벤트에 대한 소비자가 있는지 확인하려면 EtwEventEnabled 또는 EtwProviderEnabled를 호출하여 EtwWrite 호출 앞에 올 수 있습니다.

엔드 투 엔드 추적 시나리오에서 여러 구성 요소의 이벤트를 연결하려는 경우 ActivityIdRelatedActivityId 매개 변수를 사용합니다. 예를 들어 구성 요소 A, B 및 C는 관련 활동에 대한 작업을 수행하고 소비자가 해당 활동과 관련된 모든 이벤트를 사용할 수 있도록 해당 이벤트를 연결하려고 합니다.

IRQL에서 EtwWriteEx 를 호출할 수 있습니다. 그러나 IRQL이 APC_LEVEL보다 크면 EtwWrite, EtwWriteEx, EtwWriteString, EtwWriteTransfer 함수에 전달된 모든 데이터는 페이징할 수 없어야 합니다. 즉, irQL에서 실행되는 커널 모드 루틴이 APC_LEVEL 초과하면 페이지 가능한 메모리에 액세스할 수 없습니다. EtwWrite, EtwWriteEx, EtwWriteStringEtwWriteTransfer 함수에 전달된 데이터는 IRQL이 무엇인지에 관계없이 시스템 공간 메모리에 있어야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 7
지원되는 최소 서버 Windows Server 2008 R2
대상 플랫폼 유니버설
헤더 wdm.h
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe

추가 정보

EtwWrite

EventWrite

EventWriteEx