QueryAllTracesW 함수(evntrace.h)
QueryAllTraces 함수는 호출자가 쿼리할 수 있는 권한이 있는 모든 이벤트 추적 세션에 대한 속성과 통계를 검색합니다.
통사론
ULONG WMIAPI QueryAllTracesW(
[out] PEVENT_TRACE_PROPERTIES *PropertyArray,
[in] ULONG PropertyArrayCount,
[out] PULONG LoggerCount
);
매개 변수
[out] PropertyArray
이벤트 추적 세션에 대한 세션 속성 및 통계를 수신하는 EVENT_TRACE_PROPERTIES 구조체에 대한 포인터 배열입니다.
EVENT_TRACE_PROPERTIES 구조체의 Wnode.BufferSize, LoggerNameOffset 및 LogFileNameOffset 멤버만 설정하면 됩니다. 다른 멤버는 모두 0으로 설정해야 합니다.
[in] PropertyArrayCount
PropertyArray 배열의 구조 수입니다. 이 값은 ETW에서 지원하는 최대 이벤트 추적 세션 수인 64보다 작거나 같아야 합니다.
Windows 10:PropertyArrayCount 64보다 클 수 있으며 일부 시스템에서는 64개 이상의 추적 세션을 지원할 수 있습니다.
[out] LoggerCount
컴퓨터에서 시작된 실제 이벤트 추적 세션 수입니다.
반환 값
함수가 성공하면 반환 값이 ERROR_SUCCESS.
함수가 실패하면 반환 값은
ERROR_INVALID_PARAMETER
다음 중 하나는 true입니다.
- PropertyArrayCount 0이거나 지원되는 최대 세션 수보다 큽니다.
PropertyArray NULL.
ERROR_MORE_DATA
속성 배열이 너무 작아서 모든 세션에 대한 정보를 받을 수 없습니다(SessionCountPropertyArrayCount)보다 큽니다. 이 함수는 속성 배열을 PropertyArrayCount지정된 속성 구조의 수로 채웁니다.
발언
이벤트 추적 컨트롤러는 이 함수를 호출합니다.
이 함수는 호출자가 쿼리할 수 있는 권한이 있는 추적 세션을 검색합니다. 관리자 권한으로 실행되는 사용자, 성능 로그 사용자 그룹의 사용자 및 LocalSystem, LocalService, NetworkService로 실행되는 서비스는 모든 추적 세션을 볼 수 있습니다.
이 함수는 프라이빗 로깅 세션을 반환하지 않습니다.
단일 세션에 대한 정보를 검색하려면 ControlTrace 함수를 사용하고 ControlCode 매개 변수를 EVENT_TRACE_CONTROL_QUERY설정합니다.
예제
다음 예제에서는 이 함수를 호출하는 방법을 보여줍니다.
#include <windows.h>
#include <evntrace.h>
#include <vector>
const unsigned MAX_SESSION_NAME_LEN = 1024;
const unsigned MAX_LOGFILE_PATH_LEN = 1024;
const unsigned PropertiesSize =
sizeof(EVENT_TRACE_PROPERTIES) +
(MAX_SESSION_NAME_LEN * sizeof(CHAR)) +
(MAX_LOGFILE_PATH_LEN * sizeof(CHAR));
int main()
{
ULONG status;
std::vector<EVENT_TRACE_PROPERTIES*> sessions; // Array of pointers to property structures
std::vector<BYTE> buffer; // Buffer that contains all the property structures
ULONG sessionCount; // Actual number of sessions started on the computer
// The size of the session name and log file name used by the
// controllers are not known, therefore create a properties structure that allows
// for the maximum size of both.
try
{
sessionCount = 64; // Start with room for 64 sessions.
do
{
sessions.resize(sessionCount);
buffer.resize(PropertiesSize * sessionCount);
for (size_t i = 0; i != sessions.size(); i += 1)
{
sessions[i] = (EVENT_TRACE_PROPERTIES*)&buffer[i * PropertiesSize];
sessions[i]->Wnode.BufferSize = PropertiesSize;
sessions[i]->LoggerNameOffset = sizeof(EVENT_TRACE_PROPERTIES);
sessions[i]->LogFileNameOffset = sizeof(EVENT_TRACE_PROPERTIES) + (MAX_SESSION_NAME_LEN * sizeof(CHAR));
}
status = QueryAllTracesA(&sessions[0], sessionCount, &sessionCount);
} while (status == ERROR_MORE_DATA);
if (status != ERROR_SUCCESS)
{
printf("Error calling QueryAllTraces: %u\n", status);
}
else
{
printf("Actual session count: %u.\n\n", sessionCount);
for (ULONG i = 0; i < sessionCount; i++)
{
WCHAR sessionGuid[50];
(void)StringFromGUID2(sessions[i]->Wnode.Guid, sessionGuid, ARRAYSIZE(sessionGuid));
printf(
"Session GUID: %ls\n"
"Session ID: %llu\n"
"Session name: %s\n"
"Log file: %s\n"
"min buffers: %u\n"
"max buffers: %u\n"
"buffers: %u\n"
"buffers written: %u\n"
"buffers lost: %u\n"
"events lost: %u\n"
"\n",
sessionGuid,
sessions[i]->Wnode.HistoricalContext,
(PCSTR)((LPCBYTE)sessions[i] + sessions[i]->LoggerNameOffset),
(PCSTR)((LPCBYTE)sessions[i] + sessions[i]->LogFileNameOffset),
sessions[i]->MinimumBuffers,
sessions[i]->MaximumBuffers,
sessions[i]->NumberOfBuffers,
sessions[i]->BuffersWritten,
sessions[i]->LogBuffersLost,
sessions[i]->EventsLost);
}
}
}
catch (std::bad_alloc const&)
{
printf("Error allocating memory for properties.\n");
status = ERROR_OUTOFMEMORY;
}
return status;
}
메모
evntrace.h 헤더는 QUERYAllTraces를 유니코드 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입대한
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000 Professional [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows 2000 Server [데스크톱 앱만 해당] |
대상 플랫폼 | Windows |
헤더 | evntrace.h |
라이브러리 | Windows 8.1 및 Windows Server 2012 R2의 Sechost.lib; Windows 8, Windows Server 2012, Windows 7, Windows Server 2008 R2, Windows Server 2008, Windows Vista 및 Windows XP의 Advapi32.lib |
DLL | Windows 8.1 및 Windows Server 2012 R2에서 Sechost.dll; windows 8, Windows Server 2012, Windows 7, Windows Server 2008 R2, Windows Server 2008, Windows Vista 및 Windows XP의 Advapi32.dll |