Макрос FsRtlCheckOplock (rxprocs.h)

Подпрограмма FsRtlCheckOplock синхронизирует IRP для операции ввода-вывода файла с текущим оппортунистическим состоянием блокировки (oplock).

Синтаксис

void FsRtlCheckOplock(
   A1,
   A2,
   A3,
   A4,
   A5
);

Параметры

A1

Непрозрачный оппортунистический указатель блокировки для файла. Этот указатель должен быть инициализирован предыдущим вызовом FsRtlInitializeOplock.

A2

Указатель на IRP для операции ввода-вывода.

A3

Указатель на определяемые вызывающим объектом контекстные сведения, передаваемые подпрограммам обратного вызова, на которые указывают параметры CompletionRoutine и PostIrpRoutine .

A4

Указатель на подпрограмму обратного вызова, предоставляемую вызывающим абонентом. Если выполняется оппортунистический разрыв блокировки, эта подпрограмма вызывается по завершении перерыва. Этот параметр является необязательным и может иметь значение NULL. Если значение равно NULL, вызывающий объект переводится в состояние ожидания до завершения оппортунистического разрыва блокировки.

Эта подпрограмма объявляется следующим образом:

typedef VOID
(*POPLOCK_WAIT_COMPLETE_ROUTINE) (
      IN PVOID Context,
      IN PIRP Irp
      );

Эта подпрограмма имеет следующие параметры:

Контексте

Указатель сведений о контексте, переданный в параметре Context в FsRtlCheckOplock.

Irp

Указатель на IRP для операции ввода-вывода.

A5

Указатель на подпрограмму обратного вызова, предоставляемую вызывающим абонентом, которая будет вызвана, если операция ввода-вывода помещается в рабочую очередь. Этот параметр является необязательным и может иметь значение NULL.

Эта подпрограмма объявляется следующим образом:

typedef VOID
(*POPLOCK_FS_PREPOST_IRP) (
      IN PVOID Context,
      IN PIRP Irp
      );

Контексте

Указатель сведений о контексте, переданный в параметре Context в FsRtlCheckOplock.

Irp

Указатель на IRP для операции ввода-вывода.

Возвращаемое значение

None

Remarks

FsRtlCheckOplock синхронизирует IRP для операции ввода-вывода с текущим оппортунистическим состоянием блокировки файла в соответствии со следующими условиями:

  • Если операция ввода-вывода приведет к прерыванию оппортунистической блокировки, инициируется оппортунистическая блокировка.
  • Если операция ввода-вывода не может продолжаться до завершения оппортунистического разрыва блокировки, функция FsRtlCheckOplock возвращает STATUS_PENDING и вызывает подпрограмму обратного вызова, на которую указывает параметр PostIrpRoutine .
Если драйвер файловой системы или фильтра использует оппортунистические блокировки, он должен вызывать FsRtlCheckOplock из любых подпрограмм диспетчеризации для операций ввода-вывода, которые могут привести к прерываниям блокировки. Это правило применяется к следующим типам операций ввода-вывода, так как эти операции могут привести к прерыванию блокировки:

IRP_MJ_CLEANUP

IRP_MJ_CREATE

IRP_MJ_FILE_SYSTEM_CONTROL

IRP_MJ_FLUSH_BUFFERS

IRP_MJ_LOCK_CONTROL

IRP_MJ_READ

IRP_MJ_SET_INFORMATION

IRP_MJ_WRITE

Подробные сведения об оппортунистических блокировках см. в документации по Microsoft Windows SDK.

Минифильтры должны вызывать FltCheckOplock вместо FsRtlCheckOplock.

Требования

Требование Значение
Минимальная версия клиента Эта подпрограмма доступна в Microsoft Windows 2000 и более поздних версиях операционных систем Windows.
Целевая платформа Универсальное
Верхняя часть rxprocs.h (включая FltKernel.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

См. также раздел

FSCTL_OPBATCH_ACK_CLOSE_PENDING

FSCTL_OPLOCK_BREAK_ACKNOWLEDGE

FSCTL_OPLOCK_BREAK_ACK_NO_2

FSCTL_OPLOCK_BREAK_NOTIFY

FSCTL_REQUEST_BATCH_OPLOCK

FSCTL_REQUEST_FILTER_OPLOCK

FSCTL_REQUEST_OPLOCK_LEVEL_1

FSCTL_REQUEST_OPLOCK_LEVEL_2

FltCheckOplock

FsRtlCurrentBatchOplock

FsRtlInitializeOplock

FsRtlOplockFsctrl

FsRtlOplockIsFastIoPossible

FsRtlUninitializeOplock