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


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

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

Синтаксис

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

Параметры

[in] Oplock

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

[in] Irp

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

[in] OpenCount

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

[in] LowerOplockState

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

Ценность Значение
OPLOCK_LEVEL_CACHE_READ Указывает тип oplock Read (R).
OPLOCK_LEVEL_CACHE_WRITE Указывает тип операции записи (W).
OPLOCK_LEVEL_CACHE_HANDLE Указывает тип дескриптора oplock (H).

[in] Flags

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

Ценность Значение
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 Не удалось предоставить оплок. Уровень запрошенной верхней файловой системы недействителен для оплока, предоставленного для нижней файловой системы. STATUS_OPLOCK_NOT_GRANTED — это код ошибки.
STATUS_PENDING Используется только для операций FSCTL. Значение STATUS_PENDING зависит от кода FSCTL. Дополнительные сведения см. в разделе "Замечания" FsRtlOplockFsctrlEx. STATUS_PENDING — это код успешного выполнения.
STATUS_CANNOT_GRANT_REQUESTED_OPLOCK Подтверждение оплока для нового оплока не допускается. Уровень верхней файловой системы блокировки недопустим для нижней файловой системы.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 8.1
целевая платформа Всеобщий
заголовка ntifs.h (include Ntifs.h)
библиотеки NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= APC_LEVEL

См. также

FsRtlCheckUpperOplock

FsRtlOplockFsctrlEx