Fonction ControlTraceW (evntrace.h)
La fonction ControlTrace vide, interroge, met à jour ou arrête la session de suivi d’événements spécifiée.
Syntaxe
ULONG WMIAPI ControlTraceW(
CONTROLTRACE_ID TraceId,
[in] LPCWSTR InstanceName,
[in, out] PEVENT_TRACE_PROPERTIES Properties,
[in] ULONG ControlCode
);
Paramètres
TraceId
[in] InstanceName
Nom d’une session de suivi d’événements ou NULL. Vous devez spécifier InstanceName si TraceHandle a la valeur 0.
Pour spécifier la session NT Kernel Logger, définissez InstanceNamesur KERNEL_LOGGER_NAME.
[in, out] Properties
Pointeur vers une structure EVENT_TRACE_PROPERTIES initialisée. Cette structure doit être supprimée avant de définir des champs.
Si ControlCode spécifie EVENT_TRACE_CONTROL_STOP, EVENT_TRACE_CONTROL_QUERY ou EVENT_TRACE_CONTROL_FLUSH, il vous suffit de définir les membres Wnode.BufferSize, Wnode.Guid, LoggerNameOffset et LogFileNameOffset de la structure EVENT_TRACE_PROPERTIES . Si la session est une session privée, vous devez également définir LogFileMode. Vous pouvez utiliser les longueurs maximales du nom de session (1 024 caractères) et du nom maximal du fichier journal (1 024 caractères) pour calculer la taille de la mémoire tampon et les décalages s’ils ne sont pas connus.
Si ControlCode spécifie EVENT_TRACE_CONTROL_UPDATE, en entrée, les membres doivent spécifier les nouvelles valeurs pour les propriétés à mettre à jour. Sur la sortie, Propriétés contient les propriétés et les statistiques de la session de suivi d’événements. Vous pouvez mettre à jour les propriétés suivantes.
EnableFlags : définissez ce membre sur 0 pour désactiver tous les fournisseurs système. Définissez cette valeur sur une valeur autre que zéro pour spécifier les fournisseurs système que vous souhaitez activer ou conserver activés. Il peut s’agir d’une valeur différente de zéro uniquement pour les enregistreurs d’événements système.
FlushTimer : définissez ce membre si vous souhaitez modifier le délai d’attente avant de vider les tampons. Si ce membre est 0, le membre n’est pas mis à jour.
LogFileNameOffset : définissez ce membre si vous souhaitez basculer vers un autre fichier journal ou vider une trace en mode de mise en mémoire tampon dans un nouveau fichier journal. Si ce membre est 0, le nom de fichier n’est pas mis à jour. Si le décalage n’est pas égal à zéro et que vous ne modifiez pas le nom du fichier journal, la fonction retourne une erreur.
LogFileMode : définissez ce membre si vous souhaitez activer et désactiver EVENT_TRACE_REAL_TIME_MODE . Pour désactiver le temps réel, définissez ce membre sur 0. Pour activer le temps réel (création d’une session qui enregistre sur le disque ainsi que la remise d’événements en temps réel), définissez ce membre sur EVENT_TRACE_REAL_TIME_MODE et il sera ACTIVÉ avec les modes actuels.
MaximumBuffers : définissez ce membre si vous souhaitez modifier le nombre maximal de mémoires tampons qu’ETW utilise. Si ce membre est 0, le membre n’est pas mis à jour.
Pour les sessions d’enregistreur d’événements privés, vous pouvez mettre à jour uniquement les membres LogFileNameOffset et FlushTimer .
Si vous utilisez une structure EVENT_TRACE_PROPERTIES nouvellement initialisée, supprimez la structure, puis définissez Wnode.BufferSize, Wnode.Guid et Wnode.Flags, ainsi que les valeurs à mettre à jour.
Si vous réutilisez une structure EVENT_TRACE_PROPERTIES (c’est-à-dire à l’aide d’une structure que vous avez précédemment transmise à StartTrace ou ControlTrace), veillez à définir le membre LogFileNameOffset sur 0, sauf si vous modifiez le nom du fichier journal, et veillez à définir EVENT_TRACE_PROPERTIES. Wnode.Flags pour WNODE_FLAG_TRACED_GUID.
À compter de Windows 10, version 1703 : Pour de meilleures performances dans les scénarios inter-processus, vous pouvez maintenant transmettre les informations de filtrage à ControlTrace pour les enregistreurs d’événements privés à l’échelle du système. Vous devez utiliser la structure EVENT_TRACE_PROPERTIES_V2 pour inclure les informations de filtrage. Pour plus d’informations, consultez Configuration et démarrage d’une session d’enregistreur d’événements privés .
[in] ControlCode
Fonction de contrôle demandée. Vous pouvez spécifier l'une des valeurs suivantes :
EVENT_TRACE_CONTROL_FLUSH : vide les mémoires tampons actives de la session.
Cela peut être utilisé avec une session en mémoire (session démarrée avec l’indicateur EVENT_TRACE_BUFFERING_MODE ) pour écrire les données de la trace dans un fichier.
Normalement, vous n’avez pas besoin de vider les sessions basées sur des fichiers ou en temps réel, car ETW vide automatiquement une mémoire tampon lorsqu’elle est pleine (c’est-à-dire lorsqu’elle n’a pas de place pour l’événement suivant), lorsque le FlushTimer de la session de suivi expire ou lorsque la session de trace est fermée.
Windows 2000 : Cette valeur n’est pas prise en charge.
EVENT_TRACE_CONTROL_QUERY : récupère les propriétés et les statistiques de session.
EVENT_TRACE_CONTROL_STOP : arrête la session. Le handle de session n’est plus valide.
EVENT_TRACE_CONTROL_UPDATE : met à jour les propriétés de session.
EVENT_TRACE_CONTROL_INCREMENT_FILE : si la session a le
EVENT_TRACE_FILE_MODE_NEWFILE
, met à jour la session pour basculer immédiatement vers le fichier suivant, plutôt que d’attendre que le fichier précédent soit rempli. Pris en charge à partir de la mise à jour d’octobre 2018 de Windows 10.EVENT_TRACE_CONTROL_CONVERT_TO_REALTIME : remplace une session en mode fichier en session en temps réel (active la remise en temps réel et désactive l’écriture d’événements dans le fichier ETL). Pris en charge à partir de la mise à jour d’octobre 2020 de Windows 10.
Notes
Il n’est pas sûr de vider les mémoires tampons ou d’arrêter une session de trace de DllMain (peut provoquer un blocage).
Valeur retournée
Si la fonction réussit, la valeur de retour est ERROR_SUCCESS.
Si la fonction échoue, la valeur de retour est l’un des codes d’erreur système. Voici quelques erreurs courantes et leurs causes.
ERROR_BAD_LENGTH
Une des conditions suivantes est vraie :
- Le membre Wnode.BufferSize de Properties spécifie une taille incorrecte.
- Les propriétés n’ont pas suffisamment d’espace alloué pour contenir une copie du nom de session et du nom du fichier journal (le cas échéant).
ERROR_INVALID_PARAMETER
Une des conditions suivantes est vraie :
- Les propriétés ont la valeur NULL.
- InstanceName et TraceHandle sont tous deux NULL.
- InstanceName a la valeur NULL et TraceHandle n’est pas un handle valide.
- Le membre LogFileNameOffset de Properties n’est pas valide.
- Le membre LoggerNameOffset de Properties n’est pas valide.
- Le membre LogFileMode de Properties spécifie une combinaison d’indicateurs non valides.
- Le membre Wnode.Guid de Properties est SystemTraceControlGuid, mais le paramètre InstanceName n’est pas
KERNEL_LOGGER_NAME
.
ERROR_BAD_PATHNAME
Une autre session utilise déjà le nom de fichier spécifié par le membre LogFileNameOffset de la structure Properties .
ERROR_MORE_DATA
La mémoire tampon de EVENT_TRACE_PROPERTIES est trop petite pour contenir toutes les informations de la session. Si vous n’avez pas besoin des informations de propriété de la session, vous pouvez ignorer cette erreur. Si vous recevez cette erreur lors de l’arrêt de la session, ETW aura déjà arrêté la session avant de générer cette erreur.
ERROR_ACCESS_DENIED
Seuls les utilisateurs exécutant des privilèges d’administration élevés, les utilisateurs du groupe Utilisateurs du journal des performances et les services exécutés en tant que LocalSystem, LocalService et NetworkService peuvent contrôler les sessions de suivi des événements. Pour accorder à un utilisateur restreint la possibilité de contrôler les sessions de suivi, ajoutez-les au groupe Utilisateurs du journal des performances. Seuls les utilisateurs disposant de privilèges d’administration et de services exécutés en tant que LocalSystem peuvent contrôler une session NT Kernel Logger.
Windows XP et Windows 2000 : Tout le monde peut contrôler une session de suivi.
ERROR_WMI_INSTANCE_NOT_FOUND
La session donnée n’est pas en cours d’exécution.
ERROR_ACTIVE_CONNECTIONS
En cas de retour à partir d’un appel de EVENT_TRACE_CONTROL_STOP, cela indique que la session est déjà en cours d’arrêt.
Remarques
Les contrôleurs de suivi d’événements appellent cette fonction.
Cette fonction remplace les fonctions FlushTrace, QueryTrace, StopTrace et UpdateTrace .
Notes
L’en-tête evntrace.h définit ControlTrace comme un alias qui sélectionne automatiquement la version ANSI ou Unicode de cette fonction en fonction de la définition de la constante de préprocesseur UNICODE. Le mélange de l’utilisation de l’alias neutre en encodage avec du code qui n’est pas neutre en encodage peut entraîner des incompatibilités qui entraînent des erreurs de compilation ou d’exécution. Pour plus d’informations, consultez Conventions pour les prototypes de fonction.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows 2000 Professionnel [applications de bureau | Applications UWP] |
Serveur minimal pris en charge | Windows 2000 Server [applications de bureau | Applications UWP] |
Plateforme cible | Windows |
En-tête | evntrace.h |
Bibliothèque | Sechost.lib sur Windows 8.1 et Windows Server 2012 R2 ; Advapi32.lib sur Windows 8, Windows Server 2012, Windows 7, Windows Server 2008 R2, Windows Server 2008, Windows Vista et Windows XP |
DLL | Sechost.dll sur Windows 8.1 et Windows Server 2012 ; Advapi32.dll sur Windows 8, Windows Server 2012, Windows 7, Windows Server 2008 R2, Windows Server 2008, Windows Vista et Windows XP |