Функция FsRtlCheckUpperOplock (ntifs.h)
Подпрограмма FsRtlCheckUpperOplock обеспечивает оппортунистическую блокировку (oplock) во вторичных или многоуровневых файловых системах при изменении состояния блокировки. Вторичные файловые системы, такие как перенаправители сети и кластеризация файловых служб, вызывают FsRtlCheckUpperOplock при изменении состояния блокировки, удерживаемой в более низкой файловой системе вторичной файловой системой. Изменение состояния может произойти путем приостановки или обновления. При необходимости FsRtlCheckUpperOplock разрушит блокировку верхней файловой системы, чтобы подтвердить новое нижнее состояние блокировки. Вызывающий объект также может предоставлять необязательные обратные вызовы для уведомлений о подтверждении прерывания и состоянии ожидания.
Синтаксис
NTSTATUS FsRtlCheckUpperOplock(
[in] POPLOCK Oplock,
[in] ULONG NewLowerOplockState,
[in, optional] PVOID CompletionRoutineContext,
[in, optional] POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
POPLOCK_FS_PREPOST_IRP PrePendRoutine,
[in] ULONG Flags
);
Параметры
[in] Oplock
Непрозрачный указатель блокировки для файла. Этот указатель должен быть инициализирован предыдущим вызовом FsRtlInitializeOplock.
[in] NewLowerOplockState
Значение , представляющее запрошенную блокировку, удерживаемую вторичной файловой системой в более низкой файловой системе. Это побитовое сочетание ИЛИ следующего:
Значение | Значение |
---|---|
OPLOCK_LEVEL_CACHE_READ | Указывает тип чтения oplock (R). |
OPLOCK_LEVEL_CACHE_WRITE | Указывает тип записи oplock (W). |
OPLOCK_LEVEL_CACHE_HANDLE | Указывает тип дескриптора блокировки (H). |
[in, optional] CompletionRoutineContext
Указатель на определяемые вызывающим объектом контекстные сведения, передаваемые подпрограммам обратного вызова, на которые указывают параметры CompletionRoutine и PrePendIrpRoutine .
[in, optional] CompletionRoutine
Указатель на подпрограмму обратного вызова, предоставляемую вызывающим абонентом. Если выполняется оппортунистический разрыв блокировки, эта подпрограмма вызывается по завершении перерыва. Этот параметр является необязательным и может иметь значение NULL. Если значение равно NULL, вызывающий объект переводится в состояние ожидания до завершения оппортунистического разрыва блокировки.
Объявление и описание параметров этой подпрограммы приведены ниже.
typedef VOID
(*POPLOCK_WAIT_COMPLETE_ROUTINE) (
_In_ PVOID Context,
_In_opt_ PIRP Irp
);
Параметр | Описание |
---|---|
Контекст | Указатель контекстной информации, переданный в параметре CompletionRoutineContext в FsRtlCheckUpperOplock. |
Irp | Необязательный указатель на IRP для операции ввода-вывода. FsRtlCheckUpperOplock всегда присваивает этому параметру значение NULL. |
PrePendRoutine
Указатель на подпрограмму обратного вызова, предоставляемую вызывающим, если FsRtlCheckUpperOplock возвращает STATUS_PENDING. Этот параметр является необязательным и может иметь значение NULL.
Объявление и описание параметров этой подпрограммы приведены ниже.
typedef VOID
(*POPLOCK_FS_PREPOST_IRP) (
_In_ PVOID Context,
_in_opt_ PIRP Irp
);
Параметр | Описание |
---|---|
Контекст | Указатель контекстной информации, переданный в параметре CompletionRoutineContext в FsRtlCheckUpperOplock. |
Irp | Необязательный указатель на IRP для операции ввода-вывода. FsRtlCheckUpperOplock всегда присваивает этому параметру значение NULL. |
[in] Flags
Битовая маска для связанной операции ввода-вывода файла. Файловая система или драйвер фильтра задает биты, чтобы указать поведение FsRtlCheckUpperOplock. Параметр Flags имеет следующие параметры:
Значение | Значение |
---|---|
OPLOCK_UPPER_FLAG_CHECK_NO_BREAK (0x00010000) | Возвращает STATUS_CANNOT_BREAK_OPLOCK, если значение NewLowerOplockState приводит к разрыву операции. |
OPLOCK_UPPER_FLAG_NOTIFY_REFRESH_READ (0x00020000) | Разорвать только верхние блоки чтения (R) и уведомлять владельцев R о том, что они могут снова запросить R. Все остальные проверки верхней блокировки будут возвращать STATUS_CANNOT_BREAK_OPLOCK. |
Возвращаемое значение
FsRtlCheckUpperOplock возвращает соответствующий код NTSTATUS, например один из следующих:
Код возврата | Описание |
---|---|
STATUS_SUCCESS | Разрыв блокировки не требуется, или разрыв был подтвержден. Если параметр CompletionRoutine имеет значение NULL, FsRtlCheckUpperOplock блокируется, а не возвращает STATUS_PENDING. |
STATUS_CANNOT_BREAK_OPLOCK | Не удается выполнить разрыв блокировки. Условия, ограничивающие разрыв, см. в разделе Флаги. |
STATUS_PENDING | Происходит оппортунистическая блокировка. Если он указан, prePendIrpRoutine вызывается в качестве уведомления об ожидающей операции. CompletionRoutine вызывается по завершении разрыва блокировки. STATUS_PENDING — это код успешного выполнения. |
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 8.1 |
Целевая платформа | Универсальное |
Верхняя часть | ntifs.h (включая Ntifs.h) |
Библиотека | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | IRQL <= APC_LEVEL |