estructura USN_RECORD_V3 (winioctl.h)
Contiene la información de un registro de la versión 3.0 del diario de cambios de números de secuencias actualizadas (USN). El registro de la versión 2.0 se define mediante la estructura de USN_RECORD_V2 (también denominada estructura USN_RECORD ).
Sintaxis
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;
Miembros
RecordLength
Longitud total de un registro, en bytes.
Dado que USN_RECORD_V3 es un tamaño variable, se debe usar el miembro RecordLength al calcular la dirección del siguiente registro en un búfer de salida, por ejemplo, un búfer que se devuelve de las operaciones para la función DeviceIoControl que funciona con USN_RECORD_V3.
El tamaño en bytes de cualquier registro de diario de cambios es como máximo el tamaño de la estructura de USN_RECORD_V3 , más los caracteres MaximumComponentLength menos 1 (para el carácter declarado en la estructura) veces el tamaño de un carácter ancho. El valor de MaximumComponentLength se puede determinar llamando a
Función GetVolumeInformation . En C, puede determinar un tamaño de registro mediante el ejemplo de código siguiente.
C++ |
---|
MaximumChangeJournalRecordSize = QuadAlign( (MaximumComponentLength - 1) * sizeof(WCHAR) + sizeof(USN_RECORD_V3) ); |
MajorVersion
Número de versión principal del software de diario de cambios para este registro.
Por ejemplo, si el software de diario de cambios es la versión 3.0, el número de versión principal es 3.
Valor | Significado |
---|---|
|
La estructura es una estructura USN_RECORD_V2 y el resto de la estructura se debe analizar con ese diseño. |
|
La estructura es una estructura USN_RECORD_V3 y el resto de la estructura se debe analizar con ese diseño. |
|
La estructura es una [estructura USN_RECORD_V4](ns-winioctl-usn_record_v4.md) y el resto de la estructura se debe analizar con ese diseño. |
MinorVersion
Número de versión secundaria del software de diario de cambios para este registro. Por ejemplo, si el software de diario de cambios es la versión 3.0, el número de versión secundaria es cero.
FileReferenceNumber
Número ordinal de 128 bits del archivo o directorio para el que cambia este registro.
Se trata de un valor asignado arbitrariamente que asocia un registro de diario a un archivo.
ParentFileReferenceNumber
Número ordinal de 128 bits del directorio donde se encuentra el archivo o directorio asociado a este registro.
Se trata de un valor asignado arbitrariamente que asocia un registro de diario a un directorio primario.
Usn
USN de este registro.
TimeStamp
Marca de tiempo UTC estándar (FILETIME) de este registro, en formato de 64 bits.
Reason
Marcas que identifican los motivos de los cambios que se han acumulado en este registro de diario de archivos o directorios desde que se abrió el archivo o directorio.
Cuando se cierra un archivo o directorio, se genera un registro USN final con la marca USN_REASON_CLOSE establecida. El siguiente cambio (por ejemplo, después de la siguiente operación de apertura o eliminación) inicia un nuevo registro con un nuevo conjunto de marcas de motivo.
Una operación de cambio de nombre o movimiento genera dos registros USN, uno que registra el directorio primario anterior para el elemento y otro que registra un nuevo elemento primario.
En la tabla siguiente se identifican las marcas posibles.
SourceInfo
Información adicional sobre el origen del cambio, establecido por el FSCTL_MARK_HANDLE de la operación DeviceIoControl .
Cuando un subproceso escribe un nuevo registro USN, las marcas de información de origen del registro anterior siguen estando presentes solo si el subproceso también establece esas marcas. Por lo tanto, la estructura de información de origen permite que las aplicaciones filtren los registros USN establecidos solo por un origen conocido, por ejemplo, un filtro antivirus.
Se puede establecer uno de los dos valores siguientes.
SecurityId
Identificador de seguridad único asignado al archivo o directorio asociado a este registro.
FileAttributes
Los atributos del archivo o directorio asociados a este registro, tal como lo devuelve la función GetFileAttributes . Se excluyen los atributos de las secuencias asociadas al archivo o directorio.
FileNameLength
Longitud del nombre del archivo o directorio asociado a este registro, en bytes. El miembro FileName contiene este nombre. Use este miembro para determinar la longitud del nombre de archivo, en lugar de depender de un final '\0' para delimitar el nombre de archivo en FileName.
FileNameOffset
Desplazamiento del miembro FileName desde el principio de la estructura.
FileName[1]
Nombre del archivo o directorio asociado a este registro en formato Unicode. Este nombre de archivo o directorio es de longitud variable.
Al trabajar con FileName, no cuente el nombre de archivo que contiene un delimitador "\0" final, sino que determine la longitud del nombre de archivo mediante FileNameLength.
No realice ninguna aritmética de puntero en tiempo de compilación mediante FileName. En su lugar, realice los cálculos necesarios en tiempo de ejecución mediante el valor del miembro FileNameOffset . Esto ayuda a hacer que el código sea compatible con cualquier versión futura de USN_RECORD_V3.
Comentarios
En los búferes de salida devueltos por las operaciones DeviceIoControl que funcionan con USN_RECORD_V3, todos los registros se alinean en límites de 64 bits desde el inicio del búfer.
Cuando se activa el seguimiento de intervalos, NTFS cambia a producir solo USN_RECORD_V3 registros como salida.
Para proporcionar una ruta de compatibilidad ascendente en los clientes del diario de cambios, Microsoft proporciona un número de versión principal y secundaria del software de diario de cambios en la estructura de USN_RECORD_V3 . El código debe examinar estos valores, detectar su propia compatibilidad con el software de diario de cambios y, si es necesario, controlar correctamente cualquier incompatibilidad.
Un cambio en el número de versión secundaria indica que los miembros de la estructura USN_RECORD_V3 existentes siguen siendo válidos, pero que se pueden haber agregado nuevos miembros entre el miembro penúltimo y el último, que es una cadena de longitud variable.
Para controlar este cambio correctamente, el código no debe realizar ninguna aritmética de puntero en tiempo de compilación que se base en la ubicación del último miembro. Por ejemplo, esto hace que el código sizeof(USN_RECORD)
de C no sea confiable. En su lugar, confíe en cálculos en tiempo de ejecución mediante el miembro RecordLength .
Un aumento en el número de versión principal del software de diario de cambios indica que la estructura de USN_RECORD_V3 puede haber sufrido cambios importantes y que la definición actual puede no ser confiable. Si el código detecta un cambio en el número de versión principal del software de diario de cambios, no debe funcionar con el diario de cambios.
Para obtener más información, vea Crear, modificar y eliminar un Journal de cambios.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows 8 [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2012 [solo aplicaciones de escritorio] |
Encabezado | winioctl.h (incluye Windows.h) |