structure WNODE_HEADER

La structure WNODE_HEADER est membre de la structure EVENT_TRACE_PROPERTIES .

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 salle de la structure EVENT_TRACE_PROPERTIES 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.

HistoricContext

Lors de la sortie, le handle de 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.

Timestamp

Heure à laquelle les informations contenues dans cette structure ont été mises à jour, par intervalles de 100 nanosecondes, depuis minuit, le 1er janvier 1601.

Guid

GUID que vous définissez pour la session.

Pour une session NT Kernel Logger, définissez ce membre sur SystemTraceControlGuid.

Si ce membre est défini sur SystemTraceControlGuid ou GlobalLoggerGuid, l’enregistreur d’événements sera un enregistreur d’événements système.

Pour une session d’enregistreur d’événements privé, 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 un enregistreur d’événements de noyau ou une session d’journal privée, vous n’avez pas besoin 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 Compteur de performances de requête (QPC).

Avant Windows Vista : La valeur par défaut est l’heure système.

Avant Windows 10, version 1703 : pas plus de 2 types d’horloge distincts peuvent être utilisés simultanément par tous les enregistreurs d’événements système.

À compter de Windows 10, version 1703 : la restriction du type d’horloge a été supprimée. Les trois types d’horloge peuvent désormais ê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 performances de requête (QPC). Le compteur QPC fournit un horodatage haute résolution qui n’est pas affecté par les ajustements de l’horloge système. L’horodatage stocké dans l’événement équivaut à 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 des événements à partir de différentes mémoires tampons. Dans ce cas, la précision et la stabilité de l’horodatage QPC permettent une meilleure précision dans l’ordre des événements provenant de différentes mémoires tampons. Toutefois, l’horodatage QPC ne reflète pas les mises à jour de l’horloge système, par exemple, si l’horloge système est ajustée à l’avance 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 l’heure 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 la consommation de l’événement.
Pour convertir l’horodatage d’un événement en unités de 100 ns, utilisez la formule de conversion suivante :
scaledTimestamp = eventRecord.EventHeader.TimeStamp.QuadPart * 10000000.0 / logfileHeader.PerfFreq.QuadPart
Notez que sur les anciens ordinateurs, l’horodatage peut ne pas être précis, car le compteur passe parfois à l’avant 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 ajustée vers l’avant 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 sautent également vers l’avant 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 équivaut à la valeur retournée par l’API GetSystemTimeAsFileTime.
  • Sur Windows 10 ou une version ultérieure, l’horodatage stocké dans l’événement équivaut à la valeur retournée par l’API GetSystemTimePreciseAsFileTime.
Avant Windows 10, la résolution de cet horodatage était la résolution d’une horloge système, comme indiqué par le membre TimerResolution de TRACE_LOGFILE_HEADER. À compter de Windows 10, la résolution de cet horodatage est la résolution du compteur de performances, comme indiqué par le membre PerfFreq de TRACE_LOGFILE_HEADER.
Pour convertir l’horodatage d’un événement en unités de 100 ns, utilisez la formule de conversion suivante :
scaledTimestamp = eventRecord.EventHeader.TimeStamp.QuadPart
Notez que lorsque des événements sont capturés sur un système exécutant un système d’exploitation avant Windows 10, si le volume d’événements est élevé, la résolution du temps système peut ne pas être suffisante 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 livre les événements peut ne pas être correct. À compter 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é ajustée pendant la capture de la trace.
3
Compteur de cycle du processeur. Le compteur processeur fournit l’horodatage de résolution le plus élevé et est le moins gourmand en ressources à récupérer. Toutefois, le compteur processeur 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 de changements thermiques et d’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 la consommation 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 WNODE_FLAG_TRACED_GUID pour indiquer que la structure contient des informations de suivi d’événements.

Notes

Veillez à initialiser la mémoire de cette structure sur zéro avant de définir des membres.

Pour convertir un horodatage ETW en filetime, procédez comme suit :

1. Pour chaque session ou fichier journal en cours de traitement (par exemple, pour chaque EVENT\_TRACE\_LOGFILE), case activée le champ logFile.ProcessTraceMode pour déterminer si l’indicateur PROCESS\_TRACE\_MODE\_RAW\_TIMESTAMP 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’horodatage de chaque EVENT\_RECORD en un FILETIME avant d’envoyer l’EVENT\_RECORD à votre fonction EventRecordCallback. Aucun traitement supplémentaire n’est donc nécessaire. Les étapes suivantes ne doivent être utilisées que si la trace est traitée avec l’indicateur PROCESS\_TRACE\_MODE\_RAW\_TIMESTAMP. 2. Pour chaque session ou fichier journal en cours de traitement (par exemple, pour chaque EVENT\_TRACE\_LOGFILE), case activée le champ logFile.LogfileHeader.ReservedFlags pour déterminer l’échelle d’horodatage pour le fichier journal. En fonction de la valeur de ReservedFlags, suivez l’une de ces étapes pour déterminer la valeur à utiliser pour timeStampScale dans les étapes restantes :
a. If ReservedFlags == 1 (QPC) : DOUBLE timeStampScale = 10000000.0 / logFile.LogfileHeader.PerfFreq.QuadPart; B. If ReservedFlags == 2 (heure système) : DOUBLE timeStampScale = 1.0 ; Notez que les étapes restantes ne sont pas nécessaires pour les événements utilisant l’heure système, car les événements fournissent déjà leurs horodatages dans les unités FILETIME. Les étapes restantes fonctionnent, mais ne sont pas nécessaires et introduisent une petite erreur d’arrondi. c. If ReservedFlags == 3 (compteur de cycle processeur) : DOUBLE timeStampScale = 10.0 / logFile.LogfileHeader.CpuSpeedInMHz ;
3. Lors du premier appel à votre fonction EventRecordCallback pour un fichier journal particulier, utilisez les données du logFile (EVENT\_TRACE\_LOGFILE) et de l’eventRecord (EVENT\_RECORD) pour calculer le timeStampBase qui sera utilisé pour les événements restants dans le fichier journal : INT64 timeStampBase = logFile.LogfileHeader.StartTime.QuadPart - (INT64)(timeStampScale \* eventRecord.EventHeader.TimeStamp.QuadPart) ; 4. Pour chaque eventRecord (EVENT\_RECORD), convertissez l’horodatage de l’événement en FILETIME comme suit, en utilisant les valeurs timeStampScale et timeStampBase calculées aux étapes 2 et 3 : INT64 timeStampInFileTime = timeStampBase + (INT64)(timeStampScale \* eventRecord.EventHeader.TimeStamp.QuadPart) ;

Spécifications

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]
En-tête
Wmistr.h

Voir aussi

ControlCallback

EVENT_TRACE_PROPERTIES

GetTraceLoggerHandle

LARGE_INTEGER