Mise à jour d’une session de suivi des événements
Pour mettre à jour les propriétés d’une session de suivi d’événements, appelez la fonction ControlTrace à l’aide du code de contrôle EVENT_TRACE_CONTROL_UPDATE . Vous pouvez spécifier la session à mettre à jour à l’aide d’un handle de session obtenu à partir d’un appel antérieur à StartTrace ou d’un nom de session. Les propriétés de la session de suivi des événements sont mises à jour à l’aide des valeurs spécifiées dans la structure EVENT_TRACE_PROPERTIES . Vous ne pouvez mettre à jour qu’un sous-ensemble des propriétés. Pour obtenir la liste des propriétés que vous pouvez mettre à jour, consultez le paramètre Properties de la fonction ControlTrace .
Si l’appel ControlTrace réussit, la structure EVENT_TRACE_PROPERTIES est mise à jour pour refléter les nouvelles valeurs de propriété. La structure contiendra également les nouvelles statistiques d’exécution pour la session de suivi d’événements.
L’exemple suivant montre comment mettre à jour la session de suivi des événements du noyau. L’exemple interroge les valeurs de propriété actuelles et met à jour la structure avant de mettre à jour la session.
#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;
}
}
Rubriques connexes
-
Configuration et démarrage d’une session d’enregistreur d’événements privés
-
Configuration et démarrage d’une session SystemTraceProvider
-
Configuration et démarrage d’une session de suivi d’événements
-
Configuration et démarrage de la session d’enregistreur d’événements du noyau NT