Funzione TraceMessageVa (evntrace.h)
Un provider di eventi basato su RegisterTraceGuids ("classico") usa la funzione TraceMessageVa per inviare un evento WPP basato su messaggi (TMF) a una sessione di traccia eventi utilizzando va_list parametri.
Sintassi
ULONG TraceMessageVa(
[in] TRACEHANDLE LoggerHandle,
[in] ULONG MessageFlags,
[in] LPCGUID MessageGuid,
[in] USHORT MessageNumber,
[in] va_list MessageArgList
);
Parametri
[in] LoggerHandle
Handle per la sessione di traccia eventi che registra l'evento. Il provider ottiene l'handle quando chiama la funzione GetTraceLoggerHandle nell'implementazionecontrolCallback .
[in] MessageFlags
Aggiunge informazioni aggiuntive all'inizio della sezione dei dati specifici del provider dell'evento. La sezione dei dati specifici del provider dell'evento conterrà i dati solo per i flag impostati. L'elenco di variabili dei dati dell'argomento seguirà queste informazioni. Questo parametro può essere uno o più dei valori seguenti.
TRACE_MESSAGE_GUID: includere il GUID della classe di traccia di eventi nel messaggio. Il parametro MessageGuid contiene il GUID della classe di traccia eventi.
TRACE_MESSAGE_SEQUENCE: includere un numero di sequenza nel messaggio. Il numero di sequenza inizia da uno. Per usare questo flag, è necessario che il controller abbia impostato il EVENT_TRACE_USE_GLOBAL_SEQUENCE o EVENT_TRACE_USE_LOCAL_SEQUENCE modalità di file di log durante la creazione della sessione.
TRACE_MESSAGE_SYSTEMINFO: includere l'identificatore del thread e l'identificatore del processo nel messaggio.
TRACE_MESSAGE_TIMESTAMP: includere un timestamp nel messaggio.
Le informazioni sono incluse nei dati dell'evento nell'ordine seguente:
- Numero di sequenza
- GUID della classe di traccia di evento
- Timestamp
- Identificatore del thread
- Identificatore del processo
[in] MessageGuid
GUID della classe che identifica il messaggio di traccia dell'evento.
[in] MessageNumber
Numero che identifica in modo univoco ogni occorrenza del messaggio. È necessario definire il valore specificato per questo parametro; il valore deve essere significativo per l'applicazione.
[in] MessageArgList
Elenco di argomenti variabili da aggiungere al messaggio. L'elenco deve essere composto da coppie di argomenti, come indicato di seguito.
- PVOID: puntatore ai dati dell'argomento.
- size_t: dimensioni dei dati dell'argomento, in byte.
Terminare l'elenco usando una coppia di argomenti costituita da un puntatore a NULL e zero.
Il chiamante deve garantire che la somma delle dimensioni degli argomenti + 72 non superi le dimensioni del buffer della sessione di traccia eventi.
Valore restituito
Se la funzione ha esito positivo, il valore restituito viene ERROR_SUCCESS.
Se la funzione ha esito negativo, il valore restituito è uno dei codici di errore di sistema. La tabella seguente include alcuni errori comuni e le relative cause.
ERROR_INVALID_HANDLE
LoggerHandle è NULL o specifica l'handle di sessione del logger del kernel NT.
ERROR_NOT_ENOUGH_MEMORY
Sono stati esauriti i buffer liberi in cui scrivere per la sessione. Questa situazione può verificarsi in caso di frequenze di evento elevate perché il sottosistema del disco è sovraccarico o il numero di buffer è insufficiente. Invece di bloccare fino a quando non diventano disponibili più buffer, TraceMessage elimina l'evento.
Windows 2000 e Windows XP: Non supportato.
ERROR_OUTOFMEMORY
L'evento viene rimosso perché, anche se il pool di buffer non ha raggiunto le dimensioni massime, la memoria disponibile non è sufficiente per allocare un buffer aggiuntivo e non è disponibile alcun buffer per ricevere l'evento.
ERROR_INVALID_PARAMETER
MessageFlags contiene un valore non valido.
ERROR_MORE_DATA
I dati di un singolo evento non possono estendersi su più buffer. Un evento di traccia è limitato alle dimensioni del buffer della sessione di traccia eventi meno le dimensioni della struttura EVENT_TRACE_HEADER .
Commenti
I provider WPP basati su TMF chiamano questa funzione.
Nota
La maggior parte degli sviluppatori non chiamerà direttamente questa funzione. I provider WPP usano funzioni wrapper generate da tracewpp.exe anziché chiamare le API ETW.
Se non è necessario accedere alla funzionalità di traccia dei messaggi da una funzione wrapper, è possibile chiamare la versione TraceMessage di questa funzione.
I consumer dovranno usare il callback EventCallback per ricevere ed elaborare gli eventi se il parametro MessageFlags non contiene il flag TRACE_MESSAGE_GUID. Se non si specifica il flag di TRACE_MESSAGE_GUID, il consumer non sarà in grado di usare EventClassCallback perché il membro Header.Guid della struttura EVENT_TRACE non conterrà il GUID della classe di traccia di evento.
Si noti che i membri della EVENT_TRACE e delle strutture EVENT_TRACE_HEADER corrispondenti ai flag MessageFlags vengono impostati solo se viene specificato il flag corrispondente. Ad esempio, i membri ThreadId e ProcessId di EVENT_TRACE_HEADER vengono popolati solo se si specifica il flag di TRACE_MESSAGE_SYSTEMINFO.
Requisiti
Client minimo supportato | Windows XP [solo app desktop] |
Server minimo supportato | Windows Server 2003 [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | evntrace.h |
Libreria | Advapi32.lib |
DLL | Advapi32.dll |