Макрос 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
      );

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

контекста

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

Irp

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

A5

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

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

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

контекста

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

Irp

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

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

Никакой

Замечания

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

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

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Эта подпрограмма доступна в Microsoft Windows 2000 и более поздних версиях операционных систем Windows.
целевая платформа Всеобщий
заголовка rxprocs.h (include 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