Bagikan melalui


Mengonfigurasi dan Memulai Sesi Pencatat Kernel NT

Sesi NT Kernel Logger adalah sesi pelacakan peristiwa yang merekam serangkaian peristiwa kernel yang telah ditentukan sebelumnya. Anda tidak memanggil fungsi EnableTrace untuk mengaktifkan penyedia kernel. Sebagai gantinya, Anda menggunakan anggota EnableFlags dari struktur EVENT_TRACE_PROPERTIES untuk menentukan peristiwa kernel yang ingin Anda terima. Fungsi StartTrace menggunakan bendera aktifkan yang Anda tentukan untuk mengaktifkan penyedia kernel.

Hanya ada satu sesi NT Kernel Logger. Jika sesi sudah digunakan, fungsi StartTrace mengembalikan ERROR_ALREADY_EXISTS.

Untuk detail tentang memulai sesi pelacakan peristiwa, lihat Mengonfigurasi dan Memulai Sesi Pelacakan Peristiwa.

Untuk detail tentang memulai sesi pencatat privat, lihat Mengonfigurasi dan Memulai Sesi Pencatat Privat.

Untuk detail tentang memulai sesi Pencatat Global, lihat Mengonfigurasi dan Memulai Sesi Pencatat Global.

Untuk detail tentang memulai sesi AutoLogger, lihat Mengonfigurasi dan Memulai Sesi AutoLogger.

Contoh berikut menunjukkan cara mengonfigurasi dan memulai sesi NT Kernel Logger yang mengumpulkan peristiwa kernel TCP/IP jaringan dan menulisnya ke file melingkar 5MB.

#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);
}

Mengonfigurasi dan Memulai Sesi Pencatat Privat

Mengonfigurasi dan Memulai Sesi SystemTraceProvider

Mengonfigurasi dan Memulai Sesi AutoLogger

Mengonfigurasi dan Memulai Sesi Pelacakan Peristiwa

Memperbarui Sesi Pelacakan Peristiwa