Поделиться через


Настройка и запуск сеанса ведения журнала ядра NT

Сеанс ведения журнала ядра NT — это сеанс трассировки событий, который записывает предопределенный набор событий ядра. Вы не вызываете функцию EnableTrace, чтобы включить поставщиков ядра. Вместо этого вы используете поле EnableFlags структуры EVENT_TRACE_PROPERTIES для указания требуемых событий ядра, которые вы хотите получить. Функция StartTrace использует флаги включения, которые вы указываете, чтобы активировать поставщиков ядра.

Существует только один сеанс ведения журнала ядра NT. Если сеанс уже используется, функция StartTrace возвращает ERROR_ALREADY_EXISTS.

Дополнительные сведения о запуске сеанса трассировки событий см. в настройке и запускесеанса трассировки событий.

Дополнительные сведения о запуске сеанса частного ведения журнала см. в разделе Настройка и запуск сеанса частного ведения журнала.

Дополнительные сведения о запуске сеанса глобального журнала см. в разделе Настройка и запуск сеанса глобального журнала.

Дополнительные сведения о запуске сеанса AutoLogger см. в разделе Настройка и запуск сеанса AutoLogger.

В следующем примере показано, как настроить и запустить сеанс ведения журнала ядра NT, который собирает события ядра TCP/IP сети и записывает их в циклический файл 5 МБ.

#define INITGUID  // Include this #define to use SystemTraceControlGuid in Evntrace.h.

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

#define LOGFILE_PATH L"<FULLPATHTOTHELOGFILE.etl>"

void wmain(void)
{
    ULONG status = ERROR_SUCCESS;
    TRACEHANDLE SessionHandle = 0;
    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,
    // which get appended to the end of the session properties structure.
    
    BufferSize = sizeof(EVENT_TRACE_PROPERTIES) + sizeof(LOGFILE_PATH) + sizeof(KERNEL_LOGGER_NAME);
    pSessionProperties = (EVENT_TRACE_PROPERTIES*) malloc(BufferSize);    
    if (NULL == pSessionProperties)
    {
        wprintf(L"Unable to allocate %d bytes for properties structure.\n", BufferSize);
        goto cleanup;
    }
    
    // Set the session properties. You only append the log file name
    // to the properties structure; the StartTrace function appends
    // the session name for you.

    ZeroMemory(pSessionProperties, BufferSize);
    pSessionProperties->Wnode.BufferSize = BufferSize;
    pSessionProperties->Wnode.Flags = WNODE_FLAG_TRACED_GUID;
    pSessionProperties->Wnode.ClientContext = 1; //QPC clock resolution
    pSessionProperties->Wnode.Guid = SystemTraceControlGuid; 
    pSessionProperties->EnableFlags = EVENT_TRACE_FLAG_NETWORK_TCPIP;
    pSessionProperties->LogFileMode = EVENT_TRACE_FILE_MODE_CIRCULAR;
    pSessionProperties->MaximumFileSize = 5;  // 5 MB
    pSessionProperties->LoggerNameOffset = sizeof(EVENT_TRACE_PROPERTIES);
    pSessionProperties->LogFileNameOffset = sizeof(EVENT_TRACE_PROPERTIES) + sizeof(KERNEL_LOGGER_NAME); 
    StringCbCopy((LPWSTR)((char*)pSessionProperties + pSessionProperties->LogFileNameOffset), sizeof(LOGFILE_PATH), LOGFILE_PATH);

    // Create the trace session.

    status = StartTrace((PTRACEHANDLE)&SessionHandle, KERNEL_LOGGER_NAME, pSessionProperties);

    if (ERROR_SUCCESS != status)
    {
        if (ERROR_ALREADY_EXISTS == status)
        {
            wprintf(L"The NT Kernel Logger session is already in use.\n");
        }
        else
        {
            wprintf(L"EnableTrace() failed with %lu\n", status);
        }

        goto cleanup;
    }

    wprintf(L"Press any key to end trace session ");
    _getch();

cleanup:

    if (SessionHandle)
    {
        status = ControlTrace(SessionHandle, KERNEL_LOGGER_NAME, pSessionProperties, EVENT_TRACE_CONTROL_STOP);

        if (ERROR_SUCCESS != status)
        {
            wprintf(L"ControlTrace(stop) failed with %lu\n", status);
        }
    }

    if (pSessionProperties)
        free(pSessionProperties);
}

Настройка и запуск сеанса частного ведения журнала

настройка и запуск сеанса SystemTraceProvider

Настройка и запуск сеанса AutoLogger

Настройка и запуск сеанса трассировки событий

Обновление сеанса трассировки событий