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 為零
    • GuidPropertiesArrayNull
  • ERROR_MORE_DATA

    屬性陣列太小,無法接收所有已註冊提供者的資訊, (GuidCount 大於 PropertyArrayCount) 。 函式會以PropertyArrayCount中指定的結構數目填滿GuidPropertiesArray

備註

此函式會傳回已透過 RegisterTraceGuidsEventRegister) 尚未停止 (啟動的事件追蹤提供者相關資訊。

注意

若要取得已在系統上註冊之提供者資訊清單的資訊 (,也就是透過 wevtutil) 註冊的資訊清單,請使用 TdhEnumerateProviders

您可以使用 TRACE_GUID_PROPERTIES。LoggerId 成員,可判斷TRACE_GUID_PROPERTIES時,最近啟用提供者的會話 。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