Compartir a través de


Función FsRtlOplockBreakH (ntifs.h)

La rutina FsRtlOplockBreakH CACHE_HANDLE_LEVEL bloqueos oportunistas (oplocks).

Sintaxis

NTSTATUS FsRtlOplockBreakH(
  [in]           POPLOCK                       Oplock,
  [in]           PIRP                          Irp,
  [in]           ULONG                         Flags,
  [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] Flags

Máscara de bits para la operación de E/S de archivo asociada. Un sistema de archivos o controlador de filtro establece bits para especificar el comportamiento de FsRtlOplockBreakH. El parámetro Flags tiene las siguientes opciones:

OPLOCK_FLAG_COMPLETE_IF_OPLOCKED (0x00000001)

Especifica que se permite que una interrupción de interbloqueo continúe sin bloquear o pendiente la operación que provocó la interrupción del interbloqueo de operación.

OPLOCK_FLAG_IGNORE_OPLOCK_KEYS (0x00000008)

Compatible con Windows 7 y versiones posteriores.

Especifica que se permite que CACHE_HANDLE_LEVEL saltos de interbloqueo continúen independientemente de la clave de interbloqueo.

[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 hay una interrupción de interbloqueo en curso, se llama a esta rutina cuando se completa la interrupción. Este parámetro es opcional y se puede NULL. Si es NULL, el autor de la llamada se coloca en un estado de espera hasta que se complete la interrupción del interbloqueo de operación.

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:

Contexto

Puntero de información de contexto que se pasó en el parámetro Context de a FsRtlOplockBreakH.

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 va a llamar si la operación de E/S se va a poner en lápiz. Se llama a la rutina antes de que el paquete oplock lápiz el IRP. Este parámetro es opcional y se puede NULL.

Esta rutina se declara de la siguiente manera:

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

Contexto

Puntero de información de contexto que se pasó en el parámetro Context de a FsRtlOplockBreakH.

Irp

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

Valor devuelto

FsRtlOplockBreakH 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_PENDING
El IRP se publicó en una cola de trabajo. STATUS_PENDING es un código correcto.
STATUS_CANNOT_BREAK_OPLOCK
No se puede realizar la interrupción del bloqueo oportunista (oplock). IRP es una solicitud IRP_MJ_CREATE. FILE_OPEN_REQUIRING_OPLOCK se especificó en el parámetro create options para la operación y hay un interbloqueo concedido. STATUS_CANNOT_BREAK_OPLOCK es un código de error.

Observaciones

Cuando una operación debe interrumpir CACHE_HANDLE_LEVEL interbloqueos, la operación llama a FsRtlOplockBreakH.

Si el autor de la llamada especifica la marca OPLOCK_FLAG_IGNORE_OPLOCK_KEYS del parámetro Flags, FsRtlOplockBreakH interrumpe todos los interbloqueos de CACHE_HANDLE_LEVEL, independientemente de la clave de interbloqueo. El comportamiento predeterminado de FsRtlOplockBreakH es interrumpir los interbloqueos cuyas claves no coinciden con la clave en el objeto de archivo del autor de la llamada.

Los minifiltros deben llamar a FltOplockBreakH en lugar de FsRtlOplockBreakH.

Requisitos

Requisito Valor
cliente mínimo admitido La rutina FsRtlOplockBreakH está disponible a partir de Windows 7.
de la plataforma de destino de Universal
encabezado de ntifs.h (incluya Ntifs.h)
biblioteca de NtosKrnl.lib
DLL de NtosKrnl.exe
irQL <= APC_LEVEL

Consulte también

FltOplockBreakH

FsRtlInitializeOplock