USN_RECORD_V2 struttura (winioctl.h)
Contiene le informazioni per un record USN (Update Sequence Number) change journal versione 2.0. Le applicazioni non devono tentare di usare le versioni del journal di modifica precedenti alla versione 2.0. Prima di Windows 8 e Windows Server 2012 questa struttura è stata denominata USN_RECORD. Usare tale nome per compilare gli SDK e i compilatori meno recenti.
Sintassi
typedef struct {
DWORD RecordLength;
WORD MajorVersion;
WORD MinorVersion;
DWORDLONG FileReferenceNumber;
DWORDLONG ParentFileReferenceNumber;
USN Usn;
LARGE_INTEGER TimeStamp;
DWORD Reason;
DWORD SourceInfo;
DWORD SecurityId;
DWORD FileAttributes;
WORD FileNameLength;
WORD FileNameOffset;
WCHAR FileName[1];
} USN_RECORD_V2, *PUSN_RECORD_V2;
Members
RecordLength
Lunghezza totale di un record, in byte.
Poiché USN_RECORD_V2 è una dimensione variabile, il membro RecordLength deve essere usato quando si calcola l'indirizzo del record successivo in un buffer di output, ad esempio un buffer restituito dalle operazioni per la funzione DeviceIoControl che funziona con USN_RECORD_V2.
Le dimensioni in byte di qualsiasi record del journal di modifica sono alla maggior parte delle dimensioni della struttura USN_RECORD_V2 , più i caratteri MaximumComponentLength meno 1 (per il carattere dichiarato nella struttura) volte le dimensioni di un carattere wide. Il valore di MaximumComponentLength può essere determinato chiamando l'oggetto
Funzione GetVolumeInformation. In C è possibile determinare una dimensione del record usando l'esempio di codice seguente.
C++ |
---|
MaximumChangeJournalRecordSize = ( MaximumComponentLength * sizeof(WCHAR) + sizeof(USN_RECORD) + sizeof(WCHAR) ); |
MajorVersion
Numero di versione principale del software change journal per questo record.
Ad esempio, se il software change journal è versione 2.0, il numero di versione principale è 2.
Valore | Significato |
---|---|
|
La struttura è una struttura USN_RECORD_V2 e la parte restante della struttura deve essere analizzata usando tale layout. |
|
La struttura è una struttura USN_RECORD_V3 e la parte restante della struttura deve essere analizzata usando tale layout. |
|
La struttura è una [struttura USN_RECORD_V4](ns-winioctl-usn_record_v4.md) e la parte restante della struttura deve essere analizzata usando tale layout. |
MinorVersion
Numero di versione secondaria del software change journal per questo record. Ad esempio, se il software change journal è versione 2.0, il numero di versione secondaria è zero.
FileReferenceNumber
Numero ordinale del file o della directory per cui viene modificata la nota del record.
Si tratta di un valore assegnato arbitrariamente che associa un record di journal a un file.
ParentFileReferenceNumber
Numero ordinale della directory in cui si trova il file o la directory associata a questo record.
Si tratta di un valore assegnato arbitrariamente che associa un record di journal a una directory padre.
Usn
USN di questo record.
TimeStamp
Il timestamp UTC standard (FILETIME) di questo record, in formato a 64 bit.
Reason
Flag che identificano i motivi per le modifiche accumulate in questo file o record del journal di directory dopo l'apertura del file o della directory.
Quando un file o una directory si chiude, viene generato un record USN finale con il flag di USN_REASON_CLOSE impostato. La modifica successiva (ad esempio, dopo l'operazione di apertura o l'eliminazione successiva) avvia un nuovo record con un nuovo set di flag motivo.
Un'operazione di rinominazione o spostamento genera due record USN, uno che registra la directory padre precedente per l'elemento e uno che registra un nuovo padre.
La tabella seguente identifica i flag possibili.
SourceInfo
Informazioni aggiuntive sull'origine della modifica, impostate dal FSCTL_MARK_HANDLE dell'operazione DeviceIoControl .
Quando un thread scrive un nuovo record USN, i flag di informazioni di origine nel record precedente continuano a essere presenti solo se il thread imposta anche tali flag. Pertanto, la struttura delle informazioni di origine consente alle applicazioni di filtrare i record USN impostati solo da un'origine nota, ad esempio un filtro antivirus.
È possibile impostare uno dei due valori seguenti.
SecurityId
Identificatore di sicurezza univoco assegnato al file o alla directory associata a questo record.
FileAttributes
Attributi per il file o la directory associati a questo record, come restituito dalla funzione GetFileAttributes . Gli attributi dei flussi associati al file o alla directory vengono esclusi.
FileNameLength
Lunghezza in byte del nome del file o della directory associata a questo record. Il membro FileName contiene questo nome. Utilizzare questo membro per determinare la lunghezza del nome file, anziché in base a un carattere finale '\0' per delimitare il nome file in FileName.
FileNameOffset
Offset del membro FileName dall'inizio della struttura.
FileName[1]
Nome del file o della directory associata a questo record in formato Unicode. Questo nome di file o directory è di lunghezza variabile.
Quando si usa FileName, non contare sul nome file che contiene un delimitatore finale '\0', ma determinare invece la lunghezza del nome file utilizzando FileNameLength.
Non eseguire alcuna aritmetica del puntatore in fase di compilazione usando FileName. Eseguire invece i calcoli necessari in fase di esecuzione usando il valore del membro FileNameOffset . In questo modo è possibile rendere il codice compatibile con qualsiasi versione futura di USN_RECORD_V2.
Commenti
Nei buffer di output restituiti dalle operazioni DeviceIoControl che funzionano con USN_RECORD_V2, tutti i record vengono allineati ai limiti a 64 bit dall'inizio del buffer.
Per fornire un percorso di compatibilità verso l'alto nei client del journal delle modifiche, Microsoft fornisce un numero di versione principale e secondario del software del journal delle modifiche nella struttura USN_RECORD_V2 . Il codice deve esaminare questi valori, rilevare la propria compatibilità con il software change journal e, se necessario, gestire correttamente eventuali incompatibilità.
Una modifica nel numero di versione secondaria indica che i membri della struttura USN_RECORD_V2 esistenti sono ancora validi, ma che i nuovi membri potrebbero essere stati aggiunti tra il penultimo membro e l'ultimo, ovvero una stringa a lunghezza variabile.
Per gestire questa modifica normalmente, il codice non deve eseguire alcuna aritmetica del puntatore in fase di compilazione che si basa sulla posizione dell'ultimo membro. Ad esempio, questo rende il codice sizeof(USN_RECORD)
C inaffidabile. Si basano invece sui calcoli in fase di esecuzione usando il membro RecordLength .
Un aumento del numero di versione principale del software del journal delle modifiche indica che la struttura USN_RECORD_V2 potrebbe aver subito modifiche importanti e che la definizione corrente potrebbe non essere affidabile. Se il codice rileva una modifica nel numero di versione principale del software change journal, non dovrebbe funzionare con il journal delle modifiche.
Per altre informazioni, vedere Creazione, modifica ed eliminazione di una modifica Journal.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows XP [solo app desktop] |
Server minimo supportato | Windows Server 2003 [solo app desktop] |
Intestazione | winioctl.h (include Windows.h) |