Formato di file del registro eventi
Ogni registro eventi contiene un'intestazione (rappresentata dalla struttura ELF_LOGFILE_HEADER ) con una dimensione fissa, seguita da un numero variabile di record eventi (rappresentati dalle strutture EVENTLOGRECORD ) e un record di fine file (rappresentato dalla struttura ELF_EOF_RECORD ).
La struttura ELF_LOGFILE_HEADER e la struttura ELF_EOF_RECORD vengono scritte nel registro eventi quando viene creato il registro eventi e vengono aggiornate ogni volta che viene scritto un evento nel log.
Quando un'applicazione chiama la funzione ReportEvent per scrivere una voce nel registro eventi, il sistema passa i parametri al servizio di registrazione eventi. Il servizio di registrazione eventi usa le informazioni per scrivere una struttura EVENTLOGRECORD nel registro eventi. La figura seguente illustra questo processo.
I record dell'evento sono organizzati in uno dei modi seguenti:
Non ritorno a capo. Il record meno recente viene aggiunto immediatamente dopo l'intestazione del registro eventi e i nuovi record vengono aggiunti dopo l'ultimo record aggiunto (prima del ELF_EOF_RECORD). Nell'esempio seguente viene illustrato il metodo di non wrapping:
HEADER (ELF_LOGFILE_HEADER) EVENT RECORD 1 (EVENTLOGRECORD) EVENT RECORD 2 (EVENTLOGRECORD) EOF RECORD (ELF_EOF_RECORD)
Il wrapping non può verificarsi quando viene creato il registro eventi o quando il registro eventi viene cancellato. Il registro eventi continua a non eseguire il wrapping finché non viene raggiunto il limite di dimensioni del registro eventi. Le dimensioni del registro eventi sono limitate dal valore di configurazione MaxSize o dalla quantità di risorse di sistema.
Quando viene raggiunto il limite di dimensioni del registro eventi, potrebbe iniziare il wrapping. Il wrapping è controllato dal valore di configurazione conservazione . Per altre informazioni sui valori di configurazione del registro eventi, vedere Chiave del log eventi.
Avvolgimento. I record sono organizzati come buffer circolare. Man mano che vengono aggiunti nuovi record, i record meno recenti vengono sostituiti. La posizione dei record meno recenti e più recenti varia. Nell'esempio seguente viene illustrato il metodo di wrapping.
HEADER (ELF_LOGFILE_HEADER) Part of EVENT RECORD 300 (EVENTLOGRECORD) EVENT RECORD 301 (EVENTLOGRECORD) . . . EVENT RECORD 400 (EVENTLOGRECORD) EOF RECORD (ELF_EOF_RECORD) Wasted space EVENT RECORD 102 (EVENTLOGRECORD) EVENT RECORD 103 (EVENTLOGRECORD) . . . EVENT RECORD 299 (EVENTLOGRECORD) Part of EVENT RECORD 300 (EVENTLOGRECORD)
Nell'esempio il record meno recente non è più 1, ma è 102 perché lo spazio per i record da 1 a 101 è stato sovrascritto.
C'è uno spazio tra il ELF_EOF_RECORD e il record meno recente perché il sistema cancellerà un numero integrale di record per liberare spazio per il record più recente. Ad esempio, se il record più recente è lungo 100 byte e i due record meno recenti sono lunghi 75 byte, il sistema rimuoverà i due record meno recenti. I 50 byte aggiuntivi verranno usati in un secondo momento quando vengono scritti nuovi record.
Un file di registro eventi ha una dimensione fissa e, quando i record nel file vengono a capo automatico, il record alla fine del file verrà in genere suddiviso in due record. Ad esempio, se la posizione per la scrittura successiva è di 100 byte dalla fine del file e la dimensione del record è di 300 byte, i primi 100 byte verranno scritti alla fine del file e i successivi 200 byte verranno scritti all'inizio del file immediatamente dopo il ELF_LOGFILE_HEADER. Se lo spazio disponibile alla fine del file è minore della parte fissa di EVENTLOGRECORD (0x38 byte), tutto il nuovo record verrà scritto all'inizio del file immediatamente dopo il ELF_LOGFILE_HEADER. I byte inutilizzati alla fine del file verranno riempiti con il criterio 0x00000027.
Per altre informazioni e un esempio di codice, vedere Creazione di report di un evento.