다음을 통해 공유


EnumerateTraceGuids 함수(evntrace.h)

EnumerateTraceGuids 함수는 현재 컴퓨터에서 실행 중인 이벤트 추적 공급자에 대한 정보를 검색합니다.

중요

이 함수는 EnumerateTraceGuidsEx로 대체되었습니다.

구문

ULONG WMIAPI EnumerateTraceGuids(
  [in, out] PTRACE_GUID_PROPERTIES *GuidPropertiesArray,
  [in]      ULONG                  PropertyArrayCount,
  [out]     PULONG                 GuidCount
);

매개 변수

[in, out] GuidPropertiesArray

TRACE_GUID_PROPERTIES 구조체에 대한 포인터 배열입니다. 배열의 각 포인터는 TRACE_GUID_PROPERTIES 구조를 저장할 공간이 있는 버퍼를 가리킵니다.

[in] PropertyArrayCount

GuidPropertiesArray 배열의 포인터 수입니다.

[out] GuidCount

컴퓨터에 등록된 실제 이벤트 추적 공급자 수를 받습니다.

반환 값

함수가 성공하면 반환 값이 ERROR_SUCCESS.

함수가 실패하면 반환 값은 시스템 오류 코드 중 하나입니다. 다음은 몇 가지 일반적인 오류와 그 원인입니다.

  • ERROR_INVALID_PARAMETER

    다음 중 하나에 해당합니다.

    • PropertyArrayCount 가 0입니다.
    • GuidPropertiesArrayNULL입니다.
  • ERROR_MORE_DATA

    속성 배열이 너무 작아서 등록된 모든 공급자에 대한 정보를 받을 수 없습니다(GuidCountPropertyArrayCount보다 큼). 함수는 GuidPropertiesArrayPropertyArrayCount에 지정된 구조체 수로 채웁니다.

설명

이 함수는 RegisterTraceGuids, EventRegister를 통해 시작되었으며 아직 중지되지 않은 이벤트 추적 공급자에 대한 정보를 반환합니다.

참고

시스템에 등록된 공급자 매니페스트(예: 를 통해 wevtutil등록된 매니페스트)에 대한 정보를 얻으려면 TdhEnumerateProviders를 사용합니다.

TRACE_GUID_PROPERTIES 사용할 수 있습니다. TRACE_GUID_PROPERTIES 경우 공급자를 가장 최근에 사용하도록 설정한 세션을 결정하는 LoggerId 멤버입니다. IsEnableTRUE입니다.

목록에는 SystemTraceProvider 공급자가 포함되지 않습니다.

예제

다음 예제에서는 이 함수를 호출하는 방법을 보여줍니다.

#include <windows.h>
#include <evntrace.h>
#include <vector>
#include <stdio.h>

int
wmain()
{
    ULONG status = 0;

    try
    {
        ULONG guidCount;
        std::vector<TRACE_GUID_PROPERTIES> guidPropValues;
        std::vector<TRACE_GUID_PROPERTIES*> guidPropPointers;

        // First call is just to get the actual count, so allocate a small buffer.
        guidCount = 1;

        // May need to retry multiple times since new providers could be added
        // between calls.
        for (;;)
        {
            ULONG const allocated = guidCount;
            guidPropValues.resize(allocated);
            guidPropPointers.resize(allocated);

            // Initialize the pointers to point at the values.
            for (ULONG i = 0; i != allocated; i += 1)
            {
                guidPropPointers[i] = &guidPropValues[i];
            }

            guidCount = 0;
            status = EnumerateTraceGuids(guidPropPointers.data(), allocated, &guidCount);
            if (status != ERROR_MORE_DATA)
            {
                guidPropValues.resize(guidCount);
                break;
            }

        }

        if (status != ERROR_SUCCESS)
        {
            printf("EnumerateTraceGuids error: %u\n", status);
        }
        else
        {
            printf("GuidCount = %lu\n", guidCount);
            for (auto const& v : guidPropValues)
            {
                printf("%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x - %hs\n",
                    v.Guid.Data1, v.Guid.Data2, v.Guid.Data3,
                    v.Guid.Data4[0], v.Guid.Data4[1],
                    v.Guid.Data4[2], v.Guid.Data4[3], v.Guid.Data4[4],
                    v.Guid.Data4[5], v.Guid.Data4[6], v.Guid.Data4[7],
                    v.IsEnable ? "Enabled" : "Disabled");
            }
        }
    }
    catch (std::bad_alloc const&)
    {
        printf("Out of memory!\n");
        status = ERROR_OUTOFMEMORY;
    }

    return status;
}

요구 사항

   
지원되는 최소 클라이언트 Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 evntrace.h
라이브러리 Advapi32.lib
DLL Advapi32.dll

추가 정보

EnumerateTraceGuidsEx

QueryAllTraces

TRACE_GUID_PROPERTIES