Функция 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 |