Función FsRtlCheckUpperOplock (ntifs.h)

La rutina FsRtlCheckUpperOplock proporciona una comprobación de bloqueo oportunista (oplock) en sistemas de archivos secundarios o en capas cuando los interbloqueos que contienen cambian de estado. Los sistemas de archivos secundarios, como los redireccionadores de red y los servicios de archivos de agrupación en clústeres, llaman a FsRtlCheckUpperOplock cuando un interbloqueo se mantiene en un sistema de archivos inferior por el sistema de archivos secundario, cambia el estado. Un cambio de estado puede producirse mediante una interrupción o una actualización. FsRtlCheckUpperOplock interrumpirá el interbloqueo del sistema de archivos superior, si es necesario, para confirmar el nuevo estado de interbloqueo inferior. El autor de la llamada también puede proporcionar devoluciones de llamada opcionales para las notificaciones de confirmación de interrupción y estado pendiente.

Sintaxis

NTSTATUS FsRtlCheckUpperOplock(
  [in]           POPLOCK                       Oplock,
  [in]           ULONG                         NewLowerOplockState,
  [in, optional] PVOID                         CompletionRoutineContext,
  [in, optional] POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
                 POPLOCK_FS_PREPOST_IRP        PrePendRoutine,
  [in]           ULONG                         Flags
);

Parámetros

[in] Oplock

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

[in] NewLowerOplockState

Valor que representa el interbloqueo solicitado mantenido en un sistema de archivos inferior por un sistema de archivos secundario. Esta combinación or bit a bit de lo siguiente:

Valor Significado
OPLOCK_LEVEL_CACHE_READ Indica un tipo de lectura de interbloqueo (R).
OPLOCK_LEVEL_CACHE_WRITE Indica un tipo de escritura de interbloqueo (W).
OPLOCK_LEVEL_CACHE_HANDLE Indica un tipo de identificador de interbloqueo (H).

[in, optional] CompletionRoutineContext

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

[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.

La declaración y las descripciones de parámetros de esta rutina son las siguientes:

typedef VOID
(*POPLOCK_WAIT_COMPLETE_ROUTINE) (
      _In_ PVOID Context,
      _In_opt_ PIRP Irp
      );
Parámetro Descripción
Contexto Puntero de información de contexto que se pasó en el parámetro CompletionRoutineContext a FsRtlCheckUpperOplock.
Irp Puntero opcional al IRP para la operación de E/S. FsRtlCheckUpperOplock siempre lo establecerá en NULL.

PrePendRoutine

Puntero a una rutina de devolución de llamada proporcionada por el autor de la llamada que se llamará si FsRtlCheckUpperOplock devolverá STATUS_PENDING. Este parámetro es opcional y puede ser NULL.

La declaración y las descripciones de parámetros de esta rutina son las siguientes:

typedef VOID
(*POPLOCK_FS_PREPOST_IRP) (
      _In_ PVOID Context,
      _in_opt_ PIRP Irp
      );
Parámetro Descripción
Contexto Puntero de información de contexto que se pasó en el parámetro CompletionRoutineContext a FsRtlCheckUpperOplock.
Irp Puntero opcional al IRP para la operación de E/S. FsRtlCheckUpperOplock siempre lo establecerá en NULL.

[in] Flags

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

Valor Significado
OPLOCK_UPPER_FLAG_CHECK_NO_BREAK (0x00010000) Devuelve STATUS_CANNOT_BREAK_OPLOCK si el valor de NewLowerOplockState produce cualquier interrupción de interbloqueo.
OPLOCK_UPPER_FLAG_NOTIFY_REFRESH_READ (0x00020000) Interrumpa solo los interbloqueos superiores de lectura (R) y notifique a los titulares de R que pueden volver a solicitar R. Todas las demás comprobaciones de interbloqueo superior devolverán STATUS_CANNOT_BREAK_OPLOCK.

Valor devuelto

FsRtlCheckUpperOplock devuelve un código NTSTATUS adecuado, como uno de los siguientes:

Código devuelto Descripción
STATUS_SUCCESS No se requiere una interrupción de interbloqueo o se reconoció la interrupción. Si CompletionRoutine es NULL, FsRtlCheckUpperOplock se bloquea mientras se procesa la interrupción de oplock en lugar de devolver STATUS_PENDING.
STATUS_CANNOT_BREAK_OPLOCK No se puede realizar la interrupción de interbloqueo. Consulte Marcas para ver las condiciones que restringen una interrupción.
STATUS_PENDING Se está llevando a cabo una interrupción de bloqueo oportunista. Si se proporciona, se llama a PrePendIrpRoutine como una notificación de la operación pendiente. Se llama a CompletionRoutine cuando se completa la interrupción del interbloqueo. STATUS_PENDING es un código correcto.

Requisitos

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

Consulte también

FsRtlCheckOplockEx

FsRtlUpperOplockFsctrl