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


FSCTL_LOCK_VOLUME IOCTL (winioctl.h)

Блокирует том, если он не используется. Доступ к заблокированным томам можно получить только через дескрипторы к объекту файла (*hDevice), который блокирует том. Дополнительные сведения см. в разделе «Примечания».

Для выполнения этой операции вызовите функцию DeviceIoControl со следующими параметрами.

BOOL DeviceIoControl(
  (HANDLE) hVolume,            // handle to a volume
  (DWORD) FSCTL_LOCK_VOLUME,   // dwIoControlCode
  NULL,                        // lpInBuffer
  0,                           // nInBufferSize
  NULL,                        // lpOutBuffer
  0,                           // nOutBufferSize
  (LPDWORD) lpBytesReturned,   // number of bytes returned
  NULL                         // OVERLAPPED structure
);

Irp-IoStatus.Status> имеет значение STATUS_SUCCESS, если запрос выполнен успешно.

В противном случае — Состояние до соответствующего условия ошибки в виде кода NTSTATUS.

Дополнительные сведения см. в разделе Значения NTSTATUS.

Комментарии

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

\.\X:

где X — это буква раздела жесткого диска, дисковод гибких дисков или компакт-дисков. Приложение также должно указать флаги FILE_SHARE_READ и FILE_SHARE_WRITE в параметре dwShareModecreateFile.

Если указанный том является системным томом или содержит файл подкачки, операция завершается ошибкой.

Если на томе есть открытые файлы, эта операция завершится ошибкой. И наоборот, успешное выполнение этой операции указывает на отсутствие открытых файлов.

Эта операция полезна для приложений, которым требуется монопольный доступ к тому в течение определенного периода времени, например служебная программа для дисков и программы резервного копирования.

Заблокированный том остается заблокированным до тех пор, пока не произойдет одно из следующих действий:

  • Приложение использует код управления FSCTL_UNLOCK_VOLUME для разблокировки тома.
  • Дескриптор закрывается напрямую через CloseHandle или косвенно при завершении процесса.
Система сбрасывает все кэшированные данные на том перед блокировкой. Например, все данные, хранящиеся в кэше отложенной записи, записываются в том.

Файловая система NTFS обрабатывает заблокированный том как отключенный том. Код управления FSCTL_DISMOUNT_VOLUME работает аналогично, но не проверка для открытых файлов перед отключением. Обратите внимание, что без успешной операции блокировки отключенный том может быть повторно отключен любым процессом в любое время. Например, это не идеальное состояние для резервного копирования тома.

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

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

На томе блокировки CSVFs уведомление PNP будет отправляться только на том узле, где был выдан запрос на блокировку. Блокировка будет успешной, только если фильтр CSVFs поверх NTFS не видит открытых файлов.

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

Требования

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

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

CloseHandle

CreateFile

DeviceIoControl

FSCTL_DISMOUNT_VOLUME

FSCTL_UNLOCK_VOLUME

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