структура USN_RECORD_V4 (winioctl.h)
Содержит сведения для записи журнала изменений версии 4.0 для последовательного номера обновления (USN). Записи версий 2.0 и 3.0 определяются USN_RECORD_V2 (также называемые USN_RECORD) и USN_RECORD_V3 структурами соответственно.
Синтаксис
typedef struct {
USN_RECORD_COMMON_HEADER Header;
FILE_ID_128 FileReferenceNumber;
FILE_ID_128 ParentFileReferenceNumber;
USN Usn;
DWORD Reason;
DWORD SourceInfo;
DWORD RemainingExtents;
WORD NumberOfExtents;
WORD ExtentSize;
USN_RECORD_EXTENT Extents[1];
} USN_RECORD_V4, *PUSN_RECORD_V4;
Члены
Header
Структура USN_RECORD_COMMON_HEADER , описывающая длину записи, основную версию и дополнительную версию записи.
FileReferenceNumber
128-разрядный порядковый номер файла или каталога, для которых изменяется эта запись.
Это значение является произвольно назначенным значением, которое связывает запись журнала с файлом.
ParentFileReferenceNumber
128-разрядный порядковый номер каталога, в котором находится файл или каталог, связанный с этой записью.
Это значение является произвольно назначенным значением, которое связывает запись журнала с родительским каталогом.
Usn
UsN этой записи.
Reason
Флаги, определяющие причины изменений, накопленных в этом файле или записи журнала каталога с момента открытия файла или каталога.
При закрытии файла или каталога создается окончательная запись USN с установленным флагом USN_REASON_CLOSE . Следующее изменение (например, после следующей операции открытия или удаления) запускает новую запись с новым набором флагов причины.
Операция переименования или перемещения создает две записи USN: одна из них записывает старый родительский каталог для элемента, а другая — новый родительский.
В следующей таблице указаны возможные флаги.
SourceInfo
Дополнительные сведения об источнике изменения, заданные FSCTL_MARK_HANDLE операции DeviceIoControl .
Когда поток записывает новую запись USN, флаги сведений об источнике в предыдущей записи продолжают присутствовать только в том случае, если поток также устанавливает эти флаги. Таким образом, структура исходной информации позволяет приложениям отфильтровать записи USN, которые задаются только известным источником, например фильтром антивирусной программы.
Можно задать одно из следующих значений.
RemainingExtents
Количество экстентов, оставшихся после текущей записи USN_RECORD_V4 . Для описания всех измененных экстентов для данного файла может потребоваться несколько записей версии 4.0. Если элемент RemainingExtents равен 0, текущая запись USN_RECORD_V4 является последней записью USN_RECORD_V4 для файла. За последней записью USN_RECORD_V4 для заданного файла всегда следует запись USN_RECORD_V3 с по крайней мере флагом USN_REASON_CLOSE .
NumberOfExtents
Количество экстентов в текущей записи USN_RECORD_V4 .
ExtentSize
Размер каждой USN_RECORD_EXTENT структуры в элементе Extents в байтах .
Extents[1]
Массив USN_RECORD_EXTENT структур, представляющих экстенты в записи USN_RECORD_V4 .
Комментарии
Запись USN_RECORD_V4 выводится только в том случае, если отслеживание диапазона включено, а размер файла равен или больше значения элемента RangeTrackFileSizeThreshold. Пользователь всегда получает одну или несколько USN_RECORD_V4 записей, за которыми следует одна USN_RECORD_V3 запись.
Чтобы обеспечить прямую совместимость в клиентах журнала изменений, корпорация Майкрософт предоставляет основной и дополнительный номер версии программного обеспечения журнала изменений в структуре USN_RECORD_V4 . Код должен изучить эти значения, проверить собственную совместимость с программным обеспечением журнала изменений и корректно обрабатывать любые несовместимости при необходимости.
Изменение номера дополнительной версии указывает на то, что существующие элементы структуры USN_RECORD_V4 по-прежнему действительны, но новые элементы могут быть добавлены между предпоследним и последним элементом, который является строкой переменной длины.
Для корректной обработки такого изменения код не должен выполнять арифметическую арифметику указателя времени компиляции, которая зависит от расположения последнего элемента. Например, изменение номера дополнительной версии делает sizeof(USN_RECORD)
вызов ненадежным. Вместо этого следует использовать вычисления во время выполнения, использующие элемент RecordLength .
Увеличение номера основной версии программного обеспечения журнала изменений указывает на то, что структура USN_RECORD_V4 , возможно, подверглась серьезным изменениям и что текущее определение может быть ненадежным. Если код обнаруживает изменение основного номера версии программного обеспечения журнала изменений, код не должен работать с журналом изменений.
Дополнительные сведения см. в статье Создание, изменение и удаление Журнал изменений.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 8.1 [только классические приложения] |
Минимальная версия сервера | Windows Server 2012 R2 [только классические приложения] |
Верхняя часть | winioctl.h (включая Windows.h) |