Bagikan melalui


Fungsi QueryAllTracesA (evntrace.h)

Fungsi QueryAllTraces mengambil properti dan statistik untuk semua sesi pelacakan peristiwa yang izinnya dikueri oleh pemanggil.

Sintaks

ULONG WMIAPI QueryAllTracesA(
  [out] PEVENT_TRACE_PROPERTIES *PropertyArray,
  [in]  ULONG                   PropertyArrayCount,
  [out] PULONG                  LoggerCount
);

Parameter

[out] PropertyArray

Array pointer ke EVENT_TRACE_PROPERTIES struktur yang menerima properti sesi dan statistik untuk sesi pelacakan peristiwa.

Anda hanya perlu mengatur anggota Wnode.BufferSize, LoggerNameOffset , dan LogFileNameOffset dari struktur EVENT_TRACE_PROPERTIES . Semua anggota lainnya harus diatur ke nol.

[in] PropertyArrayCount

Jumlah struktur dalam array PropertyArray . Nilai ini harus kurang dari atau sama dengan 64, jumlah maksimum sesi pelacakan peristiwa yang didukung ETW.

Windows 10:PropertyArrayCount mungkin lebih besar dari 64 dan beberapa sistem mungkin mendukung lebih dari 64 sesi pelacakan.

[out] LoggerCount

Menerima jumlah jejak yang datanya dikembalikan. Ini mungkin berbeda dari jumlah aktual sesi pelacakan peristiwa yang berjalan jika pemanggil tidak memiliki izin untuk mengkueri semua sesi.

Menampilkan nilai

Jika fungsi berhasil, nilai yang dikembalikan ERROR_SUCCESS.

Jika fungsi gagal, nilai yang dikembalikan adalah salah satu kode kesalahan sistem. Berikut ini adalah beberapa kesalahan umum dan penyebabnya.

  • ERROR_INVALID_PARAMETER

    Salah satu hal berikut ini benar:

    • PropertyArrayCount adalah nol atau lebih besar dari jumlah maksimum sesi yang didukung
    • PropertyArray adalah NULL
  • ERROR_MORE_DATA

    Array properti terlalu kecil untuk menerima informasi untuk semua sesi (SessionCount lebih besar dari PropertyArrayCount). Fungsi mengisi array properti dengan jumlah struktur properti yang ditentukan dalam PropertyArrayCount.

Keterangan

Pengontrol pelacakan peristiwa memanggil fungsi ini.

Fungsi ini mengambil sesi pelacakan yang memiliki izin untuk dikueri oleh pemanggil. Pengguna yang berjalan dengan hak istimewa administratif yang ditingkatkan, pengguna di grup Pengguna Log Performa, dan layanan yang berjalan sebagai LocalSystem, LocalService, NetworkService dapat melihat sebagian besar sesi pelacakan.

Fungsi ini tidak mengembalikan sesi pengelogan privat.

Untuk mengambil informasi untuk satu sesi, gunakan fungsi ControlTrace dan atur parameter ControlCode ke EVENT_TRACE_CONTROL_QUERY.

Contoh

Contoh berikut menunjukkan cara memanggil fungsi ini.

#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(WCHAR)) +
    (MAX_LOGFILE_PATH_LEN * sizeof(WCHAR));

int wmain()
{
    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(WCHAR));
            }

            status = QueryAllTracesW(&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: %ls\n"
                    "Log file: %ls\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,
                    (PCWSTR)((LPCBYTE)sessions[i] + sessions[i]->LoggerNameOffset),
                    (PCWSTR)((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;
}

Catatan

Header evntrace.h mendefinisikan QueryAllTraces sebagai alias yang secara otomatis memilih versi ANSI atau Unicode dari fungsi ini berdasarkan definisi konstanta pra-prosesor UNICODE. Mencampur penggunaan alias encoding-netral dengan kode yang tidak mengodekan-netral dapat menyebabkan ketidakcocokan yang mengakibatkan kesalahan kompilasi atau runtime. Untuk informasi selengkapnya, lihat Konvensi untuk Prototipe Fungsi.

Persyaratan

   
Klien minimum yang didukung Windows 2000 Professional [hanya aplikasi desktop]
Server minimum yang didukung Windows 2000 Server [hanya aplikasi desktop]
Target Platform Windows
Header evntrace.h
Pustaka Sechost.lib pada Windows 8.1 dan Windows Server 2012 R2; Advapi32.lib pada Windows 8, Windows Server 2012, Windows 7, Windows Server 2008 R2, Windows Server 2008, Windows Vista dan Windows XP
DLL Sechost.dll pada Windows 8.1 dan Windows Server 2012 R2; Advapi32.dll pada Windows 8, Windows Server 2012, Windows 7, Windows Server 2008 R2, Windows Server 2008, Windows Vista, dan Windows XP

Lihat juga

ControlTrace

EVENT_TRACE_PROPERTIES

EnumerateTraceGuids