Función FsRtlCheckOplock (ntifs.h)

La rutina FsRtlCheckOplock sincroniza el IRP de una operación de E/S de archivo con el estado actual de bloqueo oportunista (oplock) del archivo.

Sintaxis

NTSTATUS FsRtlCheckOplock(
  [in]           POPLOCK                       Oplock,
  [in]           PIRP                          Irp,
  [in, optional] PVOID                         Context,
  [in, optional] POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
  [in, optional] POPLOCK_FS_PREPOST_IRP        PostIrpRoutine
);

Parámetros

[in] Oplock

Puntero de bloqueo oportunista opaco para el archivo. Este puntero debe haberse inicializado mediante una llamada anterior a FsRtlInitializeOplock.

[in] Irp

Puntero al IRP para la operación de E/S.

[in, optional] Context

Puntero a la información de contexto definida por el autor de la llamada que se va a pasar a las rutinas de devolución de llamada a las que apuntan los parámetros CompletionRoutine y PostIrpRoutine .

[in, optional] CompletionRoutine

Puntero a una rutina de devolución de llamada proporcionada por el autor de la llamada. Si está en curso una interrupción de bloqueo oportunista, se llama a esta rutina cuando se completa la interrupción. Este parámetro es opcional y puede ser NULL. Si es NULL, el autor de la llamada se coloca en un estado de espera hasta que se complete la interrupción de bloqueo oportunista.

Esta rutina se declara de la siguiente manera:

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

Esta rutina tiene los parámetros siguientes:

Parámetro Descripción
Context Puntero de información de contexto que se pasó en el parámetro Context a FsRtlCheckOplock.
Irp Puntero al IRP para la operación de E/S.

[in, optional] PostIrpRoutine

Puntero a una rutina de devolución de llamada proporcionada por el autor de la llamada que se llamará si la operación de E/S se publica en una cola de trabajo. Este parámetro es opcional y puede ser NULL.

Esta rutina se declara de la siguiente manera:

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

Esta rutina tiene los parámetros siguientes:

Parámetro Descripción
Context Puntero de información de contexto que se pasó en el parámetro Context a FsRtlCheckOplock.
Irp Puntero al IRP para la operación de E/S.

Valor devuelto

La rutina FsRtlCheckOplock devuelve STATUS_SUCCESS o un código NTSTATUS adecuado, como uno de los siguientes:

Código devuelto Descripción
STATUS_CANCELLED Se canceló el IRP. STATUS_CANCELLED es un código de error.
STATUS_CANNOT_BREAK_OPLOCK Si el IRP es un IRP_MJ_CREATE y FILE_OPEN_REQUIRING_OPLOCK está en createOptions del IRP, la rutina no iniciará una interrupción de un bloqueo oportunista existente, pero se produce un error con STATUS_CANNOT_BREAK_OPLOCK.
STATUS_OPLOCK_BREAK_IN_PROGRESS Se está llevando a cabo una interrupción de bloqueo oportunista. IRP es una solicitud de IRP_MJ_CREATE y FILE_COMPLETE_IF_OPLOCKED se especificó en el parámetro create options para la operación. STATUS_OPLOCK_BREAK_IN_PROGRESS es un código correcto.
STATUS_PENDING Se ha iniciado una interrupción de bloqueo oportunista y se ha pasado el control del IRP al paquete oplock. Si CompletionRoutine es NULL, esta rutina se bloqueará mientras se procesa el interbloqueo de operación, en lugar de devolver STATUS_PENDING. STATUS_PENDING es un código correcto.

Comentarios

FsRtlCheckOplock sincroniza el IRP de una operación de E/S con el estado de bloqueo oportunista actual de un archivo según las condiciones siguientes:

  • Si la operación de E/S hará que el bloqueo oportunista se interrumpa, se inicia la interrupción del bloqueo oportunista.

  • Si la operación de E/S no puede continuar hasta que se complete la interrupción del bloqueo oportunista, FsRtlCheckOplock devuelve STATUS_PENDING y llama a la rutina de devolución de llamada a la que apunta el parámetro PostIrpRoutine .

Si un sistema de archivos o un controlador de filtro usa bloqueos oportunistas, debe llamar a FsRtlCheckOplock desde cualquier rutina de envío para las operaciones de E/S que puedan provocar interrupciones de bloqueo oportunistas. Esta regla se aplica a los siguientes tipos de operaciones de E/S, ya que estas operaciones pueden provocar interrupciones de bloqueo oportunistas:

  • 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

Para obtener información detallada sobre los bloqueos oportunistas, consulte la documentación de Windows SDK.

Los minifiltros deben llamar a FltCheckOplock en lugar de FsRtlCheckOplock.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000
Plataforma de destino Universal
Encabezado ntifs.h (incluya FltKernel.h, Ntifs.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL <= APC_LEVEL

Consulte también

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