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


FSCTL_OPLOCK_BREAK_ACKNOWLEDGE IOCTL (winioctl.h)

Реагирует на уведомление о том, что будет нарушена монопольная оппортунистическая блокировка файла. Используйте эту операцию, чтобы указать, что файл должен получить оппортунистическую блокировку уровня 2.

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

BOOL DeviceIoControl(
  (HANDLE) hDevice,                 // handle to file
  FSCTL_OPLOCK_BREAK_ACKNOWLEDGE,   // dwIoControlCode
  NULL,                             // lpInBuffer
  0,                                // nInBufferSize
  NULL,                             // lpOutBuffer
  0,                                // nOutBufferSize
  (LPDWORD) lpBytesReturned,        // number of bytes returned
  (LPOVERLAPPED) lpOverlapped       // OVERLAPPED structure
);

Комментарии

Эта операция используется только клиентскими приложениями, запрашивающими оппортунистическую блокировку с локального сервера. Клиентские приложения, запрашивающие оппортунистические блокировки с удаленных серверов, не должны запрашивать их напрямую— перенаправитель сети прозрачно запрашивает оппортунистические блокировки для приложения.

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

FSCTL_OPLOCK_BREAK_ACKNOWLEDGE — это ответ на уведомление о том, что блокировка на уровне 1, пакетная блокировка или блокировка фильтра в файле приложения была нарушена. Это указывает серверу, что приложение должно получить оппортунистическую блокировку уровня 2. Если операция возвращает код ошибки ERROR_IO_PENDING, сервер предоставил приложению блокировку на уровне 2 для файла.

Альтернативой использованию FSCTL_OPLOCK_BREAK_ACKNOWLEDGE является указание на то, что приложение в любом случае закрывает файл. Используйте код элемента управления FSCTL_OPBATCH_ACK_CLOSE_PENDING для этого ответа.

Другой альтернативой является запрос на сохранение файла открытым, но потеря всех блокировок с помощью кода элемента управления FSCTL_OPLOCK_BREAK_ACK_NO_2 .

Приложения получают уведомления о том, что оппортунистическая блокировка нарушена с помощью элемента hEvent структуры OVERLAPPED , связанной с файлом, в котором нарушена оппортунистическая блокировка. Приложения также могут использовать такие функции, как GetOverlappedResult и HasOverlappedIoCompleted.

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

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

Требования

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

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