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) |