Compartir a través de


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 el estado de cambio. 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 mantenido 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 va a pasar a las rutinas de devolución de llamada a las que apuntan los parámetros de CompletionRoutine y PrePendIrpRoutine.

[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 bloqueo oportunista en curso, 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
de contexto de 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 se establecerá en NULL.

PrePendRoutine

Se llamará a un puntero a una rutina de devolución de llamada proporcionada por el autor de la llamada 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
de contexto de 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 se establecerá en NULL.

[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 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 el interbloqueo de operación en lugar de devolver STATUS_PENDING.
STATUS_CANNOT_BREAK_OPLOCK No se puede realizar la interrupción del 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 de oplock. STATUS_PENDING es un código correcto.

Requisitos

Requisito Valor
cliente mínimo admitido Windows 8.1
de la plataforma de destino de Universal
encabezado de ntifs.h (incluya Ntifs.h)
biblioteca de NtosKrnl.lib
DLL de NtosKrnl.exe
irQL IRQL <= APC_LEVEL

Consulte también

FsRtlCheckOplockEx

FsRtlUpperOplockFsctrl