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 |