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