Функция FsRtlUpperOplockFsctrl (ntifs.h)

Подпрограмма FsRtlUpperOplockFsctrl обрабатывает запросы и подтверждения оппортунистических блокировок (oplock) для вторичных или многоуровневых файловых систем. Верхняя файловая система отправляет состояние блокировки, удерживаемой в нижней файловой системе. FsRtlUpperOplockFsctrl определяет, следует ли предоставлять или запрещать верхний блокировок файловой системы.

Синтаксис

NTSTATUS FsRtlUpperOplockFsctrl(
  [in] POPLOCK Oplock,
  [in] PIRP    Irp,
  [in] ULONG   OpenCount,
  [in] ULONG   LowerOplockState,
  [in] ULONG   Flags
);

Параметры

[in] Oplock

Непрозрачный указатель oplock для файла. Этот указатель должен быть инициализирован предыдущим вызовом FsRtlInitializeOplock.

[in] Irp

Указатель на IRP для операции ввода-вывода.

[in] OpenCount

Количество пользовательских дескрипторов для файла, если запрашивается монопольная блокировка. Задание ненулевого значения для запроса на блокировку уровня 2, R или RH означает, что в файле есть блокировки диапазона байтов. Дополнительные сведения о типах oplock см. в разделе Типы oplocks.

[in] LowerOplockState

Значение нижнего уровня oplock, удерживаемого верхней файловой системой. Это побитовая комбинация ИЛИ следующего:

Значение Значение
OPLOCK_LEVEL_CACHE_READ Указывает тип чтения oplock (R).
OPLOCK_LEVEL_CACHE_WRITE Указывает тип записи oplock (W).
OPLOCK_LEVEL_CACHE_HANDLE Указывает тип обработчика oplock (H).

[in] Flags

Битовая маска для связанных операций oplock. Драйвер файловой системы или фильтра задает биты для указания поведения FsRtlUpperOplockFsctrl. Параметр Flags имеет следующие параметры:

Значение Значение
OPLOCK_FSCTRL_FLAG_ALL_KEYS_MATCH (0x00000001) Файловая система проверила, что все ключи oplock на всех открытых в данный момент дескрипторов совпадают. Указав этот флаг, вы разрешаете пакету oplock предоставлять блокировку уровня RW или RWH, если существует несколько открытых дескрипторов для файла.

Возвращаемое значение

FsRtlUpperOplockFsctrl возвращает одно из следующих значений NTSTATUS:

Код возврата Описание
STATUS_SUCCESS Для запроса IRP_MJ_CREATE STATUS_SUCCESS указывает, что запрошенная оппортунистическая блокировка фильтра (oplock) была предоставлена. Для операции FSCTL значение STATUS_SUCCESS зависит от кода FSCTL. Дополнительные сведения см. в разделе Примечания статьи FsRtlOplockFsctrlEx.
STATUS_CANCELLED Операция ввода-вывода была отменена. STATUS_CANCELLED — это код ошибки.
STATUS_INVALID_PARAMETER Код FSCTL для операции ввода-вывода не был допустимым запросом на блокировку значений. Допустимые типы запросов перечислены в разделе Примечания статьи FsRtlOplockFsctrlEx. STATUS_INVALID_PARAMETER — это код ошибки.
STATUS_OPLOCK_NOT_GRANTED Не удалось предоставить облокировку. Уровень запрошенной верхней блокировки файловой системы недопустим для oplock, предоставленного для нижней файловой системы. STATUS_OPLOCK_NOT_GRANTED — это код ошибки.
STATUS_PENDING Используется только для операций FSCTL. Значение STATUS_PENDING зависит от кода FSCTL. Дополнительные сведения см. в разделе Примечания статьи FsRtlOplockFsctrlEx. STATUS_PENDING — это код успешного выполнения.
STATUS_CANNOT_GRANT_REQUESTED_OPLOCK Подтверждение облокировки для нового oplock не допускается. Уровень верхней файловой системы блокировки недопустим для нижней блокировки файловой системы.

Требования

Требование Значение
Минимальная версия клиента Windows 8.1
Целевая платформа Универсальное
Верхняя часть ntifs.h (включая Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= APC_LEVEL

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

FsRtlCheckUpperOplock

FsRtlOplockFsctrlEx