структура MARK_HANDLE_INFO (winioctl.h)

Содержит сведения, используемые для пометки указанного файла или каталога, а также запись журнала изменений с порядкового номера обновления (USN) данными об изменениях. Он используется кодом элемента управления FSCTL_MARK_HANDLE .

Синтаксис

typedef struct _MARK_HANDLE_INFO {
  union {
    DWORD UsnSourceInfo;
    DWORD CopyNumber;
  } DUMMYUNIONNAME;
  DWORD  UsnSourceInfo;
  HANDLE VolumeHandle;
  DWORD  HandleInfo;
} MARK_HANDLE_INFO, *PMARK_HANDLE_INFO;

Члены

DUMMYUNIONNAME

DUMMYUNIONNAME.UsnSourceInfo

DUMMYUNIONNAME.CopyNumber

UsnSourceInfo

Тип внесенных изменений.

Операция не изменяет файл или каталог извне с точки зрения приложения, создавшего их.

Когда поток записывает новую запись USN, флаги сведений об источнике в предыдущей записи продолжают присутствовать только в том случае, если поток также устанавливает эти флаги. Таким образом, структура исходной информации позволяет приложениям фильтровать записи USN, которые задаются только известным источником, например фильтром антивирусной программы.

Определены следующие значения.

Значение Значение
USN_SOURCE_DATA_MANAGEMENT
0x00000001
Операция предоставляет сведения об изменении файла или каталога, внесенного операционной системой.

Обычно удаленное хранилище перемещает данные из внешнего хранилища в локальное. Удаленное хранилище — это программное обеспечение для управления иерархическим хранилищем. Такой шаг обычно как минимум добавляет флаг USN_REASON_DATA_OVERWRITE в запись USN. Однако данные не изменились с точки зрения пользователя. Заметив USN_SOURCE_DATA_MANAGEMENT в элементе SourceInfoструктуры USN_RECORD , содержащей запись, можно определить, что, хотя для элемента выполняется операция записи, данные не изменились.

USN_SOURCE_AUXILIARY_DATA
0x00000002
Операция добавляет поток частных данных в файл или каталог.

Примером может быть детектор вирусов, добавляющий сведения о контрольной сумме. По мере того как детектор вирусов изменяет элемент, система создает записи USN. USN_SOURCE_AUXILIARY_DATA указывает, что изменения не изменили данные приложения.

USN_SOURCE_REPLICATION_MANAGEMENT
0x00000004
Операция создает или обновляет содержимое реплицированного файла.

Например, служба репликации файлов устанавливает этот флаг при создании или обновлении файла в реплицированном каталоге.

USN_SOURCE_CLIENT_REPLICATION_MANAGEMENT
0x00000008
Репликация выполняется в клиентских системах из облака или серверов.

VolumeHandle

Дескриптор тома, в котором находится файл или каталог. Дополнительные сведения о получении дескриптора тома см. в разделе Примечания.

Этот дескриптор необходим для проверка привилегий для этой операции.

Вызывающий объект должен иметь привилегию SE_MANAGE_VOLUME_NAME . Дополнительные сведения см. в разделе Привилегии.

HandleInfo

Флаг, указывающий дополнительные сведения о файле или каталоге, определяемом значением дескриптора в элементе VolumeHandle .

Значение Значение
MARK_HANDLE_PROTECT_CLUSTERS
0x00000001
Файл помечается как не удается дефрагментировать, пока дескриптор не будет закрыт.

После закрытия дескриптора, помеченного MARK_HANDLE_PROTECT_CLUSTERS , нет никакой гарантии, что кластеры файла не будут перемещаться.

MARK_HANDLE_TXF_SYSTEM_LOG
0x00000004
Файл помечается как не удается дефрагментировать, пока дескриптор не будет закрыт.

Windows Server 2003: Этот флаг не поддерживается до Windows Server 2003 с пакетом обновления 1 (SP1).

Windows XP: Этот флаг не поддерживается.

MARK_HANDLE_NOT_TXF_SYSTEM_LOG
0x00000008
Файл помечается как не удается дефрагментировать, пока дескриптор не будет закрыт.

Windows Server 2003: Этот флаг не поддерживается до Windows Server 2003 с пакетом обновления 1 (SP1).

Windows XP: Этот флаг не поддерживается.

MARK_HANDLE_REALTIME
0x00000020
Файл помечается для чтения в режиме реального времени независимо от фактического типа файла. Файлы, помеченные этим флагом, должны быть открыты для небуферированных операций ввода-вывода.

Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP: Этот флаг не поддерживается.

MARK_HANDLE_NOT_REALTIME
0x00000040
Файл, ранее помеченный для чтения в режиме реального времени с помощью флага MARK_HANDLE_REALTIME , можно снять с этого флага, удалив поведение в режиме реального времени. Файлы, помеченные этим флагом, должны быть открыты для небуферированных операций ввода-вывода.

Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP: Этот флаг не поддерживается.

MARK_HANDLE_READ_COPY
0x00000080
Указывает, что номер копии, указанный в элементе CopyNumber , должен использоваться для операций чтения. Файлы, помеченные этим флагом, должны быть открыты для небуферированных операций ввода-вывода.

Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP: Этот флаг не поддерживается до тех пор, пока не Windows 8 и Windows Server 2012.

MARK_HANDLE_NOT_READ_COPY
0x00000100
Файл, ранее помеченный для поведения чтения и копирования с помощью флага MARK_HANDLE_READ_COPY , можно снять с этого флага, удалив поведение чтения и копирования. Файлы, помеченные этим флагом, должны быть открыты для небуферированных операций ввода-вывода.

Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP: Этот флаг не поддерживается до тех пор, пока не Windows 8 и Windows Server 2012.

MARK_HANDLE_RETURN_PURGE_FAILURE
0x00000400
При перемешивание сопоставленных и кэшированных операций ввода-вывода памяти с не кэшируемым вводом-выводом система пытается при выдаче некашированного ввода-вывода очистить сопоставления памяти для диапазона не кэшированных операций ввода-вывода. Если эти очистки завершаются сбоем, система обычно не возвращает сбой вызывающей объекту, что может привести к повреждению состояния (поэтому в документации говорится, что этого не делать). Этот флаг указывает системе возвращать сбои очистки для заданного дескриптора, чтобы приложение лучнее справилось с этой ситуацией.

Этот флаг не поддерживается до тех пор, пока не Windows 8 и Windows Server 2012.

MARK_HANDLE_DISABLE_FILE_METADATA_OPTIMIZATION
0x00001000
Файл с высокой степенью фрагментированности в NTFS использует несколько записей MFT для описания всех экстентов файла. Этот список дочерних MFT-записей (также известных как записи FRS) управляется структурой, известной как список атрибутов. Размер списка атрибутов ограничен 128 КБ. Когда размер списка атрибутов достигает определенного порогового значения, NTFS активирует фоновое сжатие экстентов, поэтому будет использоваться минимальное количество дочерних записей FRS. Этот флаг отключает функцию сжатия FRS для заданного файла.

Этот флаг не поддерживается до Windows 10.

MARK_HANDLE_ENABLE_USN_SOURCE_ON_PAGING_IO
0x00002000
Указывает NTFS задать заданное значение UsnSourceInfo при записи по страницам в Журнал USN. Обычно это не выполнялось при записи на разбиение по страницам, так как система не знала, какой поток внес указанные изменения. Это переопределение. Это работает только в том случае, если объект FileObject, который используется диспетчером памяти, имеет это состояние, связанное с ним.

Этот флаг не поддерживается до Windows 10.

MARK_HANDLE_SKIP_COHERENCY_SYNC_DISALLOW_WRITES
0x00004000
Установка этого флага сообщает системе, что запись в этом файле запрещена. Если приложение пытается открыть файл для доступа на запись, операция завершается сбоем с STATUS_ACCESS_DENIED. Если запись отображается, операция завершается сбоем с STATUS_MARKED_TO_DISALLOW_WRITES

Этот флаг не поддерживается до Windows 10.

Комментарии

Чтобы получить дескриптор тома, вызовите CreateFile с параметром lpFileName , для которого задана строка в следующей форме:

"\.\X:"

В предыдущей строке X — это буква, обозначающая диск, на котором отображается том.

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Верхняя часть winioctl.h (включая Windows.h)

См. также раздел

FSCTL_MARK_HANDLE

USN_RECORD