_Structure d’en-tête WNODE
La structure d' _ en-tête WNODE est un membre de la structure des _ _ Propriétés de trace d’événements .
Syntaxe
typedef struct _WNODE_HEADER {
ULONG BufferSize;
ULONG ProviderId;
union {
ULONG64 HistoricalContext;
struct {
ULONG Version;
ULONG Linkage;
};
};
union {
HANDLE KernelHandle;
LARGE_INTEGER TimeStamp;
};
GUID Guid;
ULONG ClientContext;
ULONG Flags;
} WNODE_HEADER, *PWNODE_HEADER;
Membres
-
BufferSize
-
Taille totale de la mémoire allouée, en octets, pour les propriétés de session de suivi d’événements. La taille de la mémoire doit inclure la place de la structure des _ _ Propriétés de la trace d’événements plus la chaîne de nom de session et la chaîne de nom de fichier journal qui suivent la structure en mémoire.
-
ProviderId
-
Réservé à un usage interne.
-
HistoricalContext
-
Lors de la sortie, handle vers la session de suivi d’événements.
-
Version
-
Réservé à un usage interne.
-
Liaison
-
Réservé à un usage interne.
-
KernelHandle
-
Réservé à un usage interne.
-
Confirmé
-
Heure à laquelle les informations de cette structure ont été mises à jour, en intervalles de 100 nanosecondes depuis le 1er janvier 1601 à minuit.
-
Uniques
-
GUID que vous définissez pour la session.
Pour une session de journal de noyau NT, définissez ce membre sur SystemTraceControlGuid.
Si ce membre a la valeur SystemTraceControlGuid ou GlobalLoggerGuid, l’enregistreur d’événements est un journal système.
Pour une session d’enregistreur d’événements privée, définissez ce membre sur le GUID du fournisseur que vous allez activer pour la session.
Si vous démarrez une session qui n’est pas une session de journalisation de noyau ou privée, vous n’êtes pas obligé de spécifier un GUID de session. Si vous ne spécifiez pas de GUID, ETW en crée un pour vous. Vous devez spécifier un GUID de session uniquement si vous souhaitez modifier les autorisations par défaut associées à une session spécifique. Pour plus d’informations, consultez la fonction EventAccessControl.
Vous ne pouvez pas démarrer plusieurs sessions avec le même GUID de session.
avant Windows Vista : Vous pouvez démarrer plusieurs sessions avec le même GUID de session.
-
ClientContext
-
Résolution d’horloge à utiliser lors de la journalisation de l’horodatage pour chaque événement. La valeur par défaut est le compteur de performance des requêtes (QPC).
avant Windows Vista : La valeur par défaut est l’heure système.
avant Windows 10, version 1703 : Deux types d’horloge distincts ne peuvent pas être utilisés simultanément par les enregistreurs d’événements système.
à partir de Windows 10, version 1703 : La restriction de type d’horloge a été supprimée. Les trois types d’horloge peuvent maintenant être utilisés simultanément par les enregistreurs d’événements système.
Vous pouvez spécifier l’une des valeurs suivantes.
Valeur Signification - 1
Compteur de performance des requêtes (QPC). Le compteur QPC fournit un horodatage haute résolution qui n’est pas affecté par les réglages de l’horloge système. L’horodatage stocké dans l’événement est équivalent à la valeur retournée par l’API QueryPerformanceCounter. Pour plus d’informations sur les caractéristiques de cet horodatage, consultez acquisition d’horodatages haute résolution.
Vous devez utiliser cette résolution si vous avez des taux d’événements élevés ou si le consommateur fusionne les événements à partir de mémoires tampons différentes. Dans ces cas, la précision et la stabilité de l’horodatage QPC permettent une meilleure précision de l’ordonnancement des événements à partir de mémoires tampons différentes. Toutefois, l’horodatage QPC ne reflète pas les mises à jour de l’horloge système, par exemple, si l’horloge système est avancée en raison de la synchronisation avec un serveur NTP pendant que la trace est en cours, les horodatages QPC dans la trace continuent de refléter le temps comme si aucune mise à jour n’avait eu lieu.
Pour déterminer la résolution, utilisez le membre PerfFreq de TRACE_LOGFILE_HEADER lors de l’utilisation de l’événement.
Pour convertir l’horodatage d’un événement en unités 100-ns, utilisez la formule de conversion suivante :
scaledTimestamp = eventRecord. EventHeader. TimeStamp. QuadPart * 10000000,0/logfileHeader. PerfFreq. QuadPart
Notez que sur les ordinateurs plus anciens, l’horodatage peut ne pas être précis, car le compteur ignore parfois les transferts en raison d’erreurs matérielles.- 2
Heure système. L’heure système fournit un horodatage qui effectue le suivi des modifications apportées à l’horloge du système, par exemple, si l’horloge système est avancée en raison de la synchronisation avec un serveur NTP pendant que la trace est en cours, les horodatages de l’heure système dans la trace se poursuivent également pour correspondre au nouveau paramètre de l’horloge système. - sur les systèmes antérieurs à Windows 10, l’horodatage stocké dans l’événement est équivalent à la valeur retournée par l’API GetSystemTimeAsFileTime.
- sur Windows 10 ou version ultérieure, l’horodatage stocké dans l’événement est équivalent à la valeur retournée par l’API GetSystemTimePreciseAsFileTime.
Pour convertir l’horodatage d’un événement en unités 100-ns, utilisez la formule de conversion suivante :
scaledTimestamp = eventRecord. EventHeader. TimeStamp. QuadPart
notez que lorsque les événements sont capturés sur un système exécutant un système d’exploitation antérieur à Windows 10, si le volume d’événements est élevé, la résolution de l’heure système peut ne pas être suffisamment précise pour déterminer la séquence d’événements. Dans ce cas, un ensemble d’événements aura le même horodatage, mais l’ordre dans lequel ETW remet les événements peut ne pas être correct. à partir de Windows 10, l’horodatage est capturé avec une précision supplémentaire, même si une certaine instabilité peut encore se produire dans les cas où l’horloge système a été réglée lors de la capture de la trace.- 3
Compteur du cycle de l’UC. Le compteur UC fournit l’horodatage de résolution le plus élevé et est le moins gourmand en ressources à récupérer. Toutefois, le compteur UC n’est pas fiable et ne doit pas être utilisé en production. Par exemple, sur certains ordinateurs, les minuteurs changent de fréquence en raison des modifications de la température et de l’alimentation, en plus de s’arrêter dans certains États.
Pour déterminer la résolution, utilisez le membre CpuSpeedInMHz de TRACE_LOGFILE_HEADER lors de l’utilisation de l’événement.
Si votre matériel ne prend pas en charge ce type d’horloge, ETW utilise l’heure système.
Windows Server 2003, Windows xp avec SP1 et Windows xp : cette valeur n’est pas prise en charge, elle a été introduite dans Windows Server 2003 avec SP1 et Windows XP avec SP2.Windows 2000 : Le membre ClientContext n’est pas pris en charge.
-
Indicateurs
-
Doit contenir le _ _ _ GUID suivi de l’indicateur WNODE pour indiquer que la structure contient des informations de suivi d’événements.
Remarques
Veillez à initialiser la mémoire pour cette structure à zéro avant de définir les membres.
Pour convertir un horodatage ETW en FILETIME, utilisez la procédure suivante :
- 1. Pour chaque session ou fichier journal en cours de traitement (par exemple, pour chaque journal de suivi d’événements \_ \_ ), consultez le champ logfile. ProcessTraceMode pour déterminer si l' \_ indicateur de datage brut du mode de trace du processus \_ \_ \_ est défini. Par défaut, cet indicateur n’est pas défini. Si cet indicateur n’est pas défini, le runtime ETW convertit automatiquement l’horodateur de chaque enregistrement d’événement \_ en FILETIME avant d’envoyer l' \_ enregistrement d’événement à votre fonction EventRecordCallback, de sorte qu’aucun traitement supplémentaire n’est nécessaire. Les étapes suivantes doivent être utilisées uniquement si la trace est en cours de traitement avec \_ l' \_ indicateur d’horodateur brut du mode de trace processus \_ \_ défini.
2. Pour chaque session ou fichier journal en cours de traitement (par exemple, pour chaque journal de suivi d’événements \_ \_ ), consultez le champ logfile. LogfileHeader. ReservedFlags pour déterminer l’échelle de l’horodatage du fichier journal. En fonction de la valeur de ReservedFlags, effectuez l’une des étapes suivantes pour déterminer la valeur à utiliser pour timeStampScale dans les étapes restantes :
- a. Si ReservedFlags = = 1 (QPC) : DOUBLE timeStampScale = 10000000,0/logFile. LogfileHeader. PerfFreq. QuadPart ;
b. Si ReservedFlags = = 2 (heure système) : DOUBLE timeStampScale = 1,0 ;
Notez que les étapes restantes ne sont pas nécessaires pour les événements qui utilisent l’heure système, car les événements fournissent déjà leurs horodatages dans les unités FILETIME. Les étapes restantes fonctionnent, mais elles ne sont pas nécessaires et introduisent une petite erreur d’arrondi.
c. Si ReservedFlags = = 3 (compteur de cycle UC) : DOUBLE timeStampScale = 10,0/logFile. LogfileHeader. CpuSpeedInMHz ;
Configuration requise
| Condition requise | Valeur |
|---|---|
| Client minimal pris en charge |
applications Windows 2000 Professional [ desktop apps | UWP] |
| Serveur minimal pris en charge |
applications de bureau Windows 2000 Server apps-applications [ | UWP] |
| En-tête |
|