Aktualisieren einer Ereignisablaufverfolgungssitzung

Um die Eigenschaften einer Ereignisablaufverfolgungssitzung zu aktualisieren, rufen Sie die ControlTrace-Funktion mithilfe des STEUERELEMENTcodes EVENT _ TRACE CONTROL _ _ UPDATE auf. Sie können die zu aktualisierende Sitzung mithilfe eines Sitzungshandle angeben, das aus einem früheren Aufruf von StartTraceoder einem Sitzungsnamen abgerufen wurde. Die Eigenschaften der Ereignisablaufverfolgungssitzung werden mithilfe der in der EVENT _ TRACE _ PROPERTIES-Struktur angegebenen Werte aktualisiert. Sie können nur eine Teilmenge der Eigenschaften aktualisieren. Eine Liste der Eigenschaften, die Sie aktualisieren können, finden Sie im Properties-Parameter der ControlTrace-Funktion.

Wenn der ControlTrace-Aufruf erfolgreich ist, wird die EVENT TRACE _ _ PROPERTIES-Struktur aktualisiert, um die neuen Eigenschaftswerte widerzuspiegeln. Die -Struktur enthält auch die neuen Ausführungsstatistiken für die Ereignisablaufverfolgungssitzung.

Das folgende Beispiel zeigt, wie die Kernelereignisablaufverfolgungssitzung aktualisiert wird. Im Beispiel werden die aktuellen Eigenschaftswerte abgefragt und die Struktur vor dem Aktualisieren der Sitzung aktualisiert.

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

#define MAX_SESSION_NAME_LEN 1024
#define MAX_LOGFILE_PATH_LEN 1024

void wmain(void)
{
    ULONG status = ERROR_SUCCESS;
    EVENT_TRACE_PROPERTIES* pSessionProperties = NULL;
    ULONG BufferSize = 0;

    // Allocate memory for the session properties. The memory must
    // be large enough to include the log file name and session name.
    // This example specifies the maximum size for the session name 
    // and log file name.
    
    BufferSize = sizeof(EVENT_TRACE_PROPERTIES) + 
        (MAX_SESSION_NAME_LEN * sizeof(WCHAR)) + 
        (MAX_LOGFILE_PATH_LEN * sizeof(WCHAR));

    pSessionProperties = (EVENT_TRACE_PROPERTIES*) malloc(BufferSize);    
    if (NULL == pSessionProperties)
    {
        wprintf(L"Unable to allocate %d bytes for properties structure.\n", BufferSize);
        goto cleanup;
    }
    
    ZeroMemory(pSessionProperties, BufferSize);
    pSessionProperties->Wnode.BufferSize = BufferSize;

    // Query for the kernel trace session's current property values.

    status = ControlTrace((TRACEHANDLE)NULL, KERNEL_LOGGER_NAME, pSessionProperties, EVENT_TRACE_CONTROL_QUERY);

    if (ERROR_SUCCESS != status)
    {
        if (ERROR_WMI_INSTANCE_NOT_FOUND == status)
        {
            wprintf(L"The Kernel Logger is not running.\n");
        }
        else
        {
            wprintf(L"ControlTrace(query) failed with %lu\n", status);
        }

        goto cleanup;
    }

    // Update the enable flags to also enable the Process and Thread providers.

    pSessionProperties->LogFileNameOffset = 0;  // Zero tells ETW not to update the file name
    pSessionProperties->Wnode.Flags = WNODE_FLAG_TRACED_GUID;
    pSessionProperties->EnableFlags |= EVENT_TRACE_FLAG_PROCESS | EVENT_TRACE_FLAG_THREAD;

    // Update the session's properties.

    status = ControlTrace((TRACEHANDLE)NULL, KERNEL_LOGGER_NAME, pSessionProperties, EVENT_TRACE_CONTROL_UPDATE);
    if (ERROR_SUCCESS != status)
    {
        wprintf(L"ControlTrace(update) failed with %lu.\n", status);
        goto cleanup;
    }

    wprintf(L"\nUpdated session");

cleanup:

    if (pSessionProperties)
    {
        free(pSessionProperties);
        pSessionProperties = NULL;
    }
}

Konfigurieren und Starten einer privaten Protokollierungssitzung

Konfigurieren und Starten einer SystemTraceProvider-Sitzung

Konfigurieren und Starten einer AutoLogger-Sitzung

Konfigurieren und Starten einer Ereignisablaufverfolgungssitzung

Konfigurieren und Starten der NT-Kernelprotokollierungssitzung