Функция FltOplockFsctrl (fltkernel.h)
FltOplockFsctrl выполняет различные оппортунистические операции блокировки (oplock) от имени драйвера минифильтра.
Синтаксис
FLT_PREOP_CALLBACK_STATUS FLTAPI FltOplockFsctrl(
[in] POPLOCK Oplock,
[in] PFLT_CALLBACK_DATA CallbackData,
[in] ULONG OpenCount
);
Параметры
[in] Oplock
Непрозрачный указатель на блокировку для файла. Этот указатель должен быть инициализирован предыдущим вызовом FltInitializeOplock.
[in] CallbackData
Указатель на структуру FLT_CALLBACK_DATA для операции ввода-вывода. Этот параметр является обязательным и не может иметь значение NULL.
[in] OpenCount
Количество пользовательских дескрипторов для файла, если запрашивается монопольная блокировка. Задание ненулевого значения для запроса на блокировку уровня 2, R или RH означает, что в файле есть блокировки диапазона байтов. Сведения о типах oplock см. в разделе Обзор Oplock.
Возвращаемое значение
FltOplockFsctrl возвращает FLT_PREOP_PENDING для некоторых операций FSCTL. Дополнительные сведения см. на справочных страницах для кодов FSCTL, перечисленных в следующем разделе Примечаний. В противном случае Функция FltOplockFsctrl возвращает FLT_PREOP_COMPLETE.
Комментарии
Драйвер минифильтра вызывает FltOplockFsctrl для выполнения различных оппортунистических операций блокировки для операций ввода-вывода создания или управления файловой системой.
Структура FLT_CALLBACK_DATA , на которую указывает параметр CallbackData , должна представлять операцию IRP_MJ_FILE_SYSTEM_CONTROL или IRP_MJ_CREATE на основе IRP .
Если операция является IRP_MJ_FILE_SYSTEM_CONTROL операцией, FltOplockFsctrl можно использовать со следующими кодами FSCTL:
- FSCTL_OPBATCH_ACK_CLOSE_PENDING
- FSCTL_OPLOCK_BREAK_ACK_NO_2
- FSCTL_OPLOCK_BREAK_ACKNOWLEDGE
- FSCTL_OPLOCK_BREAK_NOTIFY
- FSCTL_REQUEST_BATCH_OPLOCK
- FSCTL_REQUEST_FILTER_OPLOCK
- FSCTL_REQUEST_OPLOCK_LEVEL_1
- FSCTL_REQUEST_OPLOCK_LEVEL_2
Код FSCTL задается в элементе FsControlCodeструктуры FLT_PARAMETERS для операции. Дополнительные сведения о FsControlCode и других параметрах IRP_MJ_FILE_SYSTEM_CONTROL см. в разделе FLT_PARAMETERS для IRP_MJ_FILE_SYSTEM_CONTROL.
Дополнительные сведения об оппортунистических блокировках см. в документации по Microsoft Windows SDK.
Если операция является запросом IRP_MJ_CREATE , fltOplockFsctrl можно использовать для запроса ожидающей блокировки фильтра, если выполняются все следующие условия:
- Значение параметра OpenCount должно быть равно 1.
- Значение параметра DesiredAccess для запроса IRP_MJ_CREATE равно FILE_READ_ATTRIBUTES. Этот параметр задается в элементе SecurityContext структуры FLT_PARAMETERS для операции. Дополнительные сведения см. в разделе FLT_PARAMETERS для IRP_MJ_CREATE.
- Значение параметра ShareAccess для операции IRP_MJ_CREATE равно FILE_SHARE_READ, FILE_SHARE_WRITE или FILE_SHARE_DELETE. Этот параметр задается в элементе ShareAccess структуры FLT_PARAMETERS для операции. Дополнительные сведения см. в разделе FLT_PARAMETERS для IRP_MJ_CREATE.
Фильтры и файловые системы, вызывающие эту функцию, должны синхронизировать вызовы с предоставленным системой пакетом oplock. Дополнительные сведения см. в разделе Синхронизация Oplock .
Требования
Требование | Значение |
---|---|
Целевая платформа | Универсальное |
Верхняя часть | fltkernel.h (включая Fltkernel.h) |
Библиотека | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL |
См. также раздел
FLT_PARAMETERS для IRP_MJ_CREATE
FLT_PARAMETERS для IRP_MJ_FILE_SYSTEM_CONTROL
FSCTL_OPBATCH_ACK_CLOSE_PENDING