Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Подпрограмма 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 |