FSCTL_OPLOCK_BREAK_ACK_NO_2 IOCTL (winioctl.h)

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

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

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

Комментарии

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

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

Когда вы получите уведомление о том, что оппортунистическая блокировка файла скоро будет нарушена, используйте код управления FSCTL_OPLOCK_BREAK_ACK_NO_2 , чтобы сообщить серверу, что вы хотите отказаться от любых оппортунистических блокировок, но планируете сохранить файл открытым. Если операция возвращает код ошибки ERROR_IO_PENDING, сервер предоставил блокировку на уровне 2 для файла.

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

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

Приложения получают уведомления о том, что оппортунистическая блокировка нарушена с помощью элемента 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)

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