Поделиться через


FSCTL_DELETE_USN_JOURNAL IOCTL (winioctl.h)

Удаляет журнал изменений по номеру обновления (USN) в томе или ожидает уведомления об удалении журнала изменений.

C++
BOOL 
WINAPI 
DeviceIoControl( (HANDLE) hDevice,              // handle to volume
                 FSCTL_DELETE_USN_JOURNAL,      // dwIoControlCode(LPVOID) lpInBuffer,           // input buffer
                 (DWORD) nInBufferSize,         // size of input buffer
                 NULL,                          // lpOutBuffer0,                             // nOutBufferSize(LPDWORD) lpBytesReturned,     // number of bytes returned
                 (LPOVERLAPPED) lpOverlapped ); // OVERLAPPED structure

Замечания

Сведения о последствиях перекрывающихся операций ввода-вывода в этой операции см. в разделе "Примечания" раздела DeviceIoControl.

Вы можете использовать FSCTL_DELETE_USN_JOURNAL для удаления журнала изменений. Файловая система NTFS запускает операцию удаления и немедленно возвращается в вызывающий процесс, если флаг USN_DELETE_FLAG_NOTIFY не установлен в DeleteFlags член DELETE_USN_JOURNAL_DATA.

Если USN_DELETE_FLAG_NOTIFY и флаги USN_DELETE_FLAG_DELETE заданы, вызов FSCTL_DELETE_USN_JOURNAL начинает процесс удаления. Затем вызов блокирует вызывающий поток и ожидает удаления (при синхронном или не перекрывающемся вызове) или настраивает уведомление о событии с помощью порта завершения ввода-вывода или другого механизма и возвращает (при асинхронном или перекрывающемся вызове).

Вы также можете использовать FSCTL_DELETE_USN_JOURNAL для получения уведомлений о завершении удаления журнала изменений, задав только USN_DELETE_FLAG_NOTIFY. При этом операция FSCTL_DELETE_USN_JOURNAL либо ожидает завершения удаления перед возвратом (при синхронном или не перекрывающемся вызове), либо настраивает уведомление о завершении событий с помощью порта завершения ввода-вывода или другого механизма (в асинхронном или перекрывающемся вызове).

Удаление, по которому приложение получает уведомление, может быть инициировано текущим процессом или другим процессом. Например, когда приложение запущено, оно может использовать FSCTL_DELETE_USN_JOURNAL, чтобы определить, выполняется ли удаление другим процессом и если это так, выход.

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

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

Дополнительные сведения см. в разделе Создание, изменение и удаление журнала изменений.

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

\\.\X:

В приведенной выше строке X — это буква, определяющая диск, на котором отображается том. Том должен быть NTFS.

В Windows 8 и Windows Server 2012 этот код поддерживается следующими технологиями.

Технологии Поддержанный
Протокол SMB 3.0 Нет
Отработка отказа SMB 3.0 (TFO) Нет
SMB 3.0 с масштабируемыми общими папками (SO) Нет
Файловая система общего тома кластера (CSVFS) Да

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows XP [только классические приложения]
минимальный поддерживаемый сервер Windows Server 2003 [только классические приложения]
заголовка winioctl.h (включая Windows.h)

См. также

CREATE_USN_JOURNAL_DATA

журналы изменений

CreateFile

DELETE_USN_JOURNAL_DATA

DeviceIoControl

FSCTL_CREATE_USN_JOURNAL

ПЕРЕКРЫВАЮЩИЕСЯ

коды управления томами