Функция 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
Значение, представляющее запрошенный оплок, удерживаемый в более низкой файловой системе вторичной файловой системой. Это битовая комбинация OR следующего вида:
Ценность | Значение |
---|---|
OPLOCK_LEVEL_CACHE_READ | Указывает тип oplock Read (R). |
OPLOCK_LEVEL_CACHE_WRITE | Указывает тип операции записи (W). |
OPLOCK_LEVEL_CACHE_HANDLE | Указывает тип дескриптора oplock (H). |
[in, optional] CompletionRoutineContext
Указатель на сведения о контексте, определяемые вызывающим объектом, которые необходимо передать в подпрограммы обратного вызова, на которые указывают параметры
[in, optional] CompletionRoutine
Указатель на подпрограмму обратного вызова, предоставленного вызывающим абонентом. Если выполняется оппортунистическая блокировка, эта подпрограмма вызывается при завершении разрыва. Этот параметр является необязательным и может иметь значение NULL. Если значение NULL, вызывающий объект помещается в состояние ожидания до завершения оппортунистического разрыва блокировки.
Объявление и описание параметров этой подпрограммы приведены следующим образом:
typedef VOID
(*POPLOCK_WAIT_COMPLETE_ROUTINE) (
_In_ PVOID Context,
_In_opt_ PIRP Irp
);
Параметр | Описание |
---|---|
контекста |
Указатель сведений о контексте, переданный в параметре CompletionRoutineContextFsRtlCheckUpperOplock. |
Irp | Необязательный указатель на IRP для операции ввода-вывода. FsRtlCheckUpperOplock всегда будет иметь значение NULL. |
PrePendRoutine
Указатель на подпрограмму обратного вызова, предоставленного вызывающим, если FsRtlCheckUpperOplock вернет STATUS_PENDING. Этот параметр является необязательным и может иметь значение NULL.
Объявление и описание параметров этой подпрограммы приведены следующим образом:
typedef VOID
(*POPLOCK_FS_PREPOST_IRP) (
_In_ PVOID Context,
_in_opt_ PIRP Irp
);
Параметр | Описание |
---|---|
контекста |
Указатель сведений о контексте, переданный в параметре CompletionRoutineContextFsRtlCheckUpperOplock. |
Irp | Необязательный указатель на IRP для операции ввода-вывода. FsRtlCheckUpperOplock всегда будет иметь значение NULL. |
[in] Flags
Битовая маска для связанной операции ввода-вывода файла. Файловая система или драйвер фильтра задает биты, чтобы указать поведение FsRtlCheckUpperOplock. Параметр флагов
Ценность | Значение |
---|---|
OPLOCK_UPPER_FLAG_CHECK_NO_BREAK (0x00010000) | Возвращает STATUS_CANNOT_BREAK_OPLOCK, если значение NewLowerOplockState приведет к любому разрыву oplock. |
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 вызывается как уведомление о ожидающей операции. CompleteRoutine вызывается после завершения останова oplock. STATUS_PENDING — это код успешного выполнения. |
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows 8.1 |
целевая платформа | Всеобщий |
заголовка | ntifs.h (include Ntifs.h) |
библиотеки |
NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | IRQL <= APC_LEVEL |