Función FltOplockBreakH (fltkernel.h)
La rutina FltOplockBreakH interrumpe CACHE_HANDLE_LEVEL bloqueos oportunistas (oplocks).
Sintaxis
FLT_PREOP_CALLBACK_STATUS FLTAPI FltOplockBreakH(
[in] POPLOCK Oplock,
[in] PFLT_CALLBACK_DATA CallbackData,
[in] ULONG Flags,
[in, optional] PVOID Context,
[in, optional] PFLTOPLOCK_WAIT_COMPLETE_ROUTINE WaitCompletionRoutine,
[in, optional] PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine
);
Parámetros
[in] Oplock
Puntero oplock opaco para el archivo. Este puntero debe haberse inicializado mediante una llamada anterior a FltInitializeOplock.
[in] CallbackData
Puntero a la estructura de datos de devolución de llamada (FLT_CALLBACK_DATA) para la operación de E/S.
[in] Flags
Máscara de bits para la operación de E/S de archivo asociada. Un controlador de minifiltro establece bits para especificar el comportamiento de FltOplockBreakH. El parámetro Flags tiene las siguientes opciones:
OPLOCK_FLAG_COMPLETE_IF_OPLOCKED (0x00000001)
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)
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 WaitCompletionRoutine y PrePostCallbackDataRoutine .
[in, optional] WaitCompletionRoutine
Puntero a una rutina de devolución de llamada proporcionada por el autor de la llamada. Si hay un salto de interbloqueo 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 completa la interrupción del interbloqueo de operación.
Esta rutina se declara de la siguiente manera:
typedef VOID
(*PFLTOPLOCK_WAIT_COMPLETE_ROUTINE) (
__in PFLT_CALLBACK_DATA CallbackData,
__in_opt PVOID Context
);
Esta rutina tiene los parámetros siguientes:
CallbackData
Puntero a la estructura de datos de devolución de llamada para la operación de E/S.
Context
Puntero de información de contexto que se pasó en el parámetro Context a FltOplockBreakH.
[in, optional] PrePostCallbackDataRoutine
Puntero a una rutina de devolución de llamada proporcionada por el autor de la llamada que se llamará si la operación de E/S debe estar manuscrita. Se llama a la rutina antes de que el paquete oplock peda el IRP. Este parámetro es opcional y puede ser NULL.
Esta rutina se declara de la siguiente manera:
typedef VOID
(*PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE) (
__in PFLT_CALLBACK_DATA CallbackData,
__in_opt PVOID Context
);
Esta rutina tiene los parámetros siguientes:
CallbackData
Puntero a la estructura de datos de devolución de llamada para la operación de E/S.
Context
Puntero de información de contexto que se pasó en el parámetro Context a FltOplockBreakH.
Valor devuelto
FltOplockBreakH devuelve uno de los siguientes códigos de FLT_PREOP_CALLBACK_STATUS:
Código devuelto | Descripción |
---|---|
|
FltOplockBreakH encontró un error de asignación de grupo o una llamada a la función FsRtlOplockBreakH devolvió un error. FltOplockBreakH establecerá el código de error en el miembro Status de la estructura IO_STATUS_BLOCK . La estructura IO_STATUS_BLOCK se especifica en el miembro IoStatus de la estructura de datos de devolución de llamada FLT_CALLBACK_DATA . El parámetro CallbackData apunta a este FLT_CALLBACK_DATA. |
|
Se inició una interrupción de interbloqueo, lo que hizo que el Administrador de filtros publicara la operación de E/S en una cola de trabajo. La operación de E/S se representa mediante los datos de devolución de llamada a los que apunta el parámetro CallbackData . |
|
Los datos de devolución de llamada a los que apunta el parámetro CallbackData no se han lápiz y la operación de E/S se realizó inmediatamente. Tenga en cuenta que si el autor de la llamada especificó OPLOCK_FLAG_COMPLETE_IF_OPLOCKED en el parámetro Flags , una interrupción de interbloqueo podría estar en curso aunque la operación de E/S no estuviera en el lápiz. Para determinar si esta es la situación, el autor de la llamada debe comprobar si hay STATUS_OPLOCK_BREAK_IN_PROGRESS en el miembro Status de la estructura IO_STATUS_BLOCK . La estructura IO_STATUS_BLOCK se especifica en el miembro IoStatus de la estructura de datos de devolución de llamada FLT_CALLBACK_DATA . |
Comentarios
Para obtener más información sobre los bloqueos oportunistas, consulte la documentación de Microsoft Windows SDK.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | La rutina FltOplockBreakH está disponible a partir de Windows 7. |
Plataforma de destino | Universal |
Encabezado | fltkernel.h (incluya Fltkernel.h) |
Library | FltMgr.lib |
Archivo DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL |