UMDEtwRegister 함수(umdprovider.h)

이벤트 추적 공급자를 등록합니다. 드라이버는 로그 이벤트를 호출하기 전에 이 함수를 호출해야 합니다.

구문

void UMDEtwRegister(
  PFNUMDETW_RUNDOWN CbRundown
);

매개 변수

CbRundown

사용자 모드 드라이버의 현재 상태에 대한 정보를 반환하는 콜백 함수에 대한 포인터입니다.

이 콜백 함수는 모든 현재 할당 매핑에 대해 UMDEtwLogMapAllocation 함수를 호출해야 합니다.

반환 값

없음

설명

CbRundown 매개 변수의 데이터 형식은 다음과 같이 정의됩니다.

typedef void (*PFNUMDETW_RUNDOWN)();

UMDEtwRegister 는 Umdprovider.h에서 다음과 같이 인라인으로 정의됩니다.

// GUID for UMD ETW provider
// {A688EE40-D8D9-4736-B6F9-6B74935BA3B1}
static const GUID UMDEtwProviderId = 
{ 0xa688ee40, 0xd8d9, 0x4736, { 0xb6, 0xf9, 0x6b, 0x74, 0x93, 0x5b, 0xa3, 0xb1 } };

// Registration handle, returned by EventRegister and passed to EventUnregister
__declspec(selectany) REGHANDLE RegHandle = NULL;

// Whether any level of logging is enabled.
__declspec(selectany) BOOLEAN Enabled = FALSE;

// Whether we are currently in a rundown
__declspec(selectany) BOOLEAN InRundown = FALSE;

// Callback to the driver when a rundown is needed
__declspec(selectany) PFNUMDETW_RUNDOWN Rundown = NULL;

FORCEINLINE void NTAPI EnableCallback(
  __in      LPCGUID SourceId,
  __in      ULONG IsEnabled,
  __in      UCHAR Level,
  __in      ULONGLONG MatchAnyKeyword,
  __in      ULONGLONG MatchAllKeywords,
  __in_opt  PEVENT_FILTER_DESCRIPTOR FilterData,
  __in_opt  PVOID CallbackContext
)
{
    switch (IsEnabled)
    {
        case EVENT_CONTROL_CODE_DISABLE_PROVIDER:
            Enabled = FALSE;
            break;
        case EVENT_CONTROL_CODE_ENABLE_PROVIDER:
            Enabled = TRUE;
            break;
        case EVENT_CONTROL_CODE_CAPTURE_STATE:
            // Temporarily enable logging during the rundown
            BOOLEAN OldEnabled = Enabled;
            Enabled = TRUE;
            
            InRundown = TRUE;
            Rundown();
            InRundown = FALSE;

            // Restore Enabled to its original state
            Enabled = OldEnabled;
            
            break;
    }
}

FORCEINLINE void UMDEtwRegister(PFNUMDETW_RUNDOWN RundownCb)
{
    Rundown = RundownCb;

    // Register the provider
    EventRegister(&UMDEtwProviderId,
                  EnableCallback,
                  NULL,
                  &RegHandle);
}

EventRegister 함수 및 EVENT_CONTROL_CODE_XXX 값은 Windows 이벤트 설명서에 설명되어 있습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 8
지원되는 최소 서버 Windows Server 2012
대상 플랫폼 데스크톱
머리글 umdprovider.h(Umdprovider.h 포함)

추가 정보

UMDEtwLogMapAllocation

UMDEtwUnregister