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입니다.
- GuidPropertiesArray 는 NULL입니다.
ERROR_MORE_DATA
속성 배열이 너무 작아서 등록된 모든 공급자에 대한 정보를 받을 수 없습니다(GuidCount 가 PropertyArrayCount보다 큼). 함수는 GuidPropertiesArray 를 PropertyArrayCount에 지정된 구조체 수로 채웁니다.
설명
이 함수는 RegisterTraceGuids, EventRegister를 통해 시작되었으며 아직 중지되지 않은 이벤트 추적 공급자에 대한 정보를 반환합니다.
참고
시스템에 등록된 공급자 매니페스트(예: 를 통해 wevtutil
등록된 매니페스트)에 대한 정보를 얻으려면 TdhEnumerateProviders를 사용합니다.
TRACE_GUID_PROPERTIES 사용할 수 있습니다. TRACE_GUID_PROPERTIES 경우 공급자를 가장 최근에 사용하도록 설정한 세션을 결정하는 LoggerId 멤버입니다. IsEnable은 TRUE입니다.
목록에는 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 |