Функция FsRtlOplockFsctrlEx (ntifs.h)
Подпрограмма FsRtlOplockFsctrlEx выполняет различные операции оппортунистической блокировки (oplock) от имени файловой системы или драйвера фильтра.
Синтаксис
NTSTATUS FsRtlOplockFsctrlEx(
[in] POPLOCK Oplock,
[in] PIRP Irp,
[in] ULONG OpenCount,
[in] ULONG Flags
);
Параметры
[in] Oplock
Непрозрачный указатель на блокировку файла. Этот указатель должен быть инициализирован предыдущим вызовом FsRtlInitializeOplock.
[in] Irp
Указатель на IRP для операции ввода-вывода. Этот параметр является обязательным и не может иметь значение NULL.
[in] OpenCount
Количество пользовательских дескрипторов для файла, если запрашивается монопольная блокировка. Задание ненулевого значения для запроса на блокировку уровня 2, R или RH указывает на наличие блокировки диапазона байтов в файле. Сведения о типах oplock см. в статье Обзор oplock.
[in] Flags
Битовая маска для связанных операций блокировки. Файловая система или драйвер фильтра задает биты для указания поведения FsRtlOplockFsctrlEx. Этот параметр имеет следующие параметры:
Flag | Значение |
---|---|
OPLOCK_FSCTRL_FLAG_ALL_KEYS_MATCH (0x00000001) | Файловая система проверила соответствие всех ключей блокировки на всех открытых в данный момент дескрипторов. Указав этот флаг, вы разрешаете пакету oplock предоставлять блокировку уровня RW или RWH, если существует несколько открытых дескрипторов для файла. Дополнительные сведения о типах oplock см. в статье Обзор oplock. |
Возвращаемое значение
FsRtlOplockFsctrlEx возвращает одно из следующих значений NTSTATUS:
Код возврата | Описание |
---|---|
STATUS_SUCCESS | Для запроса IRP_MJ_CREATE STATUS_SUCCESS указывает, что запрошенная блокировка фильтра была предоставлена. Для операции FSCTL значение STATUS_SUCCESS зависит от кода FSCTL. Дополнительные сведения см. на страницах справочника по кодам FSCTL, перечисленным в следующем разделе Примечаний. |
STATUS_CANCELLED | Операция ввода-вывода отменена. STATUS_CANCELLED — это код ошибки. |
STATUS_INVALID_PARAMETER | Код FSCTL для операции ввода-вывода не был одним из допустимых значений, перечисленных в следующем разделе Примечания. STATUS_INVALID_PARAMETER — это код ошибки. |
STATUS_OPLOCK_NOT_GRANTED | Не удалось предоставить блокировку. STATUS_OPLOCK_NOT_GRANTED — это код ошибки. |
STATUS_PENDING | Используется только для операций FSCTL. Значение STATUS_PENDING зависит от кода FSCTL. Дополнительные сведения см. на страницах справочника по кодам FSCTL, перечисленным в следующем разделе Примечаний. STATUS_PENDING — это код успешного выполнения. |
STATUS_CANNOT_BREAK_OPLOCK | Не удалось предоставить новый блокировок. IRP является запросом IRP_MJ_CREATE, и FILE_OPEN_REQUIRING_OPLOCK был указан в параметре параметров создания для операции. STATUS_CANNOT_BREAK_OPLOCK — это код успешного выполнения. |
Комментарии
Файловые системы и устаревшие драйверы фильтров вызывают FsRtlOplockFsctrlEx для выполнения различных операций блокировки для операции создания или операции ввода-вывода управления файловой системой. Минифильтры должны вызывать FltOplockFsctrlEx вместо FsRtlOplockFsctrlEx.
IRP, на который указывает параметр IRP , должен быть допустимым для операции IRP_MJ_FILE_SYSTEM_CONTROL или IRP_MJ_CREATE .
Если IRP является запросом IRP_MJ_FILE_SYSTEM_CONTROL, FsRtlOplockFsctrlEx можно использовать с одним из следующих кодов FSCTL, заданных в IrpSp-Parameters.FileSystemControl.FsControlCode>:
- FSCTL_OPBATCH_ACK_CLOSE_PENDING
- FSCTL_OPLOCK_BREAK_ACK_NO_2
- FSCTL_OPLOCK_BREAK_ACKNOWLEDGE
- FSCTL_OPLOCK_BREAK_NOTIFY
- FSCTL_REQUEST_BATCH_OPLOCK
- FSCTL_REQUEST_FILTER_OPLOCK
- FSCTL_REQUEST_OPLOCK_LEVEL_1
- FSCTL_REQUEST_OPLOCK_LEVEL_2
- FSCTL_REQUEST_OPLOCK
Дополнительные сведения об этих FSCTL и оппортунистических блокировках в целом см. в документации по Microsoft Windows SDK.
Если IRP является запросом IRP_MJ_CREATE, FsRtlOplockFsctrlEx можно использовать для запроса ожидающего блокировки фильтра, если выполняются все следующие условия:
- Значение параметра OpenCount должно быть равно 1.
- Значение параметра DesiredAccess для запроса IRP_MJ_CREATE должно быть FILE_READ_ATTRIBUTES.
- Значение параметра ShareAccess для запроса IRP_MJ_CREATE должно быть FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE.
Если запрос для ожидающего блокировки фильтра предоставлен, FsRtlOplockFsctrlEx возвращает STATUS_SUCCESS. Дополнительные сведения о создании параметров см. в справочной записи для IRP_MJ_CREATE.
Фильтры и файловые системы, вызывающие эту функцию, должны синхронизировать вызовы с предоставленным системой пакетом oplock. Дополнительные сведения см. в разделе Синхронизация Oplock .
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Подпрограмма FsRtlOplockFsctrlEx доступна начиная с Windows 7. |
Целевая платформа | Универсальное |
Верхняя часть | ntifs.h (включая Ntifs.h) |
Библиотека | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
См. также раздел
FSCTL_OPBATCH_ACK_CLOSE_PENDING
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по