USN_RECORD_V3 struttura (winioctl.h)
Contiene le informazioni per un record usN (Update Sequence Number) change journal versione 3.0. Il record 2.0 della versione 2.0 è definito dalla struttura USN_RECORD_V2 (chiamata anche struttura USN_RECORD ).
Sintassi
typedef struct {
DWORD RecordLength;
WORD MajorVersion;
WORD MinorVersion;
FILE_ID_128 FileReferenceNumber;
FILE_ID_128 ParentFileReferenceNumber;
USN Usn;
LARGE_INTEGER TimeStamp;
DWORD Reason;
DWORD SourceInfo;
DWORD SecurityId;
DWORD FileAttributes;
WORD FileNameLength;
WORD FileNameOffset;
WCHAR FileName[1];
} USN_RECORD_V3, *PUSN_RECORD_V3;
Members
RecordLength
Lunghezza totale di un record, in byte.
Poiché USN_RECORD_V3 è 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_V3.
Le dimensioni in byte di qualsiasi record del journal di modifica sono alla maggior parte delle dimensioni della struttura USN_RECORD_V3 , 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 = QuadAlign( (MaximumComponentLength - 1) * sizeof(WCHAR) + sizeof(USN_RECORD_V3) ); |
MajorVersion
Numero di versione principale del software change journal per questo record.
Ad esempio, se il software change journal è versione 3.0, il numero di versione principale è 3.
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 3.0, il numero di versione secondaria è zero.
FileReferenceNumber
Numero ordinale a 128 bit del file o della directory per cui viene modificato questo record.
Si tratta di un valore assegnato arbitrariamente che associa un record di journal a un file.
ParentFileReferenceNumber
Numero ordinale a 128 bit 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, impostata 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 sono esclusi.
FileNameLength
Lunghezza del nome del file o della directory associata a questo record, in byte. Il membro FileName contiene questo nome. Usare questo membro per determinare la lunghezza del nome file anziché a seconda di un '\0' finale per delimitare il nome del file in FileName.
FileNameOffset
Offset del membro FileName dall'inizio della struttura.
FileName[1]
Nome del file o della directory associato a questo record in formato Unicode. Questo file o nome della directory è di lunghezza variabile.
Quando si usa FileName, non contare sul nome del file contenente un delimitatore finale '\0', ma determinare invece la lunghezza del nome file usando FileNameLength.
Non eseguire alcun puntatore aritmetico in fase di compilazione usando FileName. Invece, effettuare calcoli necessari in fase di esecuzione usando il valore del membro FileNameOffset . In questo modo è possibile rendere il codice compatibile con tutte le versioni future di USN_RECORD_V3.
Commenti
Nei buffer di output restituiti dalle operazioni DeviceIoControl che funzionano con USN_RECORD_V3, tutti i record vengono allineati ai limiti a 64 bit dall'inizio del buffer.
Quando viene attivato il rilevamento dell'intervallo, NTFS passa alla produzione di solo record USN_RECORD_V3 come output.
Per fornire un percorso di compatibilità verso l'alto nei client del journal di modifica, Microsoft fornisce un numero di versione principale e secondario del software change journal nella struttura USN_RECORD_V3 . Il codice deve esaminare questi valori, rilevare la propria compatibilità con il software del journal di modifica e, se necessario, gestire in modo appropriato qualsiasi incompatibilità.
Una modifica nel numero di versione secondaria indica che i membri della struttura USN_RECORD_V3 esistenti sono ancora validi, ma che i nuovi membri potrebbero essere stati aggiunti tra il penultimo membro e l'ultimo, ovvero una stringa di lunghezza variabile.
Per gestire tale modifica in modo normale, il codice non deve eseguire alcun puntatore in fase di compilazione aritmetica che si basa sulla posizione dell'ultimo membro. Ad esempio, il codice sizeof(USN_RECORD)
C non è affidabile. Si basano invece sui calcoli di runtime usando il membro RecordLength .
Un aumento del numero di versione principale del software change journal indica che la struttura USN_RECORD_V3 potrebbe avere 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 deve funzionare con il journal di modifica.
Per altre informazioni, vedere Creazione, modifica ed eliminazione di una modifica Journal.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows 8 [solo app desktop] |
Server minimo supportato | Windows Server 2012 [solo app desktop] |
Intestazione | winioctl.h (include Windows.h) |