Compartir a través de


Función FltDoCompletionProcessingWhenSafe (fltkernel.h)

Si es seguro hacerlo, la función FltDoCompletionProcessingWhenSafe ejecuta una rutina de devolución de llamada posterior al controlador de minifiltro.

Sintaxis

BOOLEAN FLTAPI FltDoCompletionProcessingWhenSafe(
  [in]           PFLT_CALLBACK_DATA           Data,
  [in]           PCFLT_RELATED_OBJECTS        FltObjects,
  [in, optional] PVOID                        CompletionContext,
  [in]           FLT_POST_OPERATION_FLAGS     Flags,
  [in]           PFLT_POST_OPERATION_CALLBACK SafePostCallback,
  [out]          PFLT_POSTOP_CALLBACK_STATUS  RetPostOperationStatus
);

Parámetros

[in] Data

Puntero a la estructura de datos de devolución de llamada (FLT_CALLBACK_DATA) para la operación de E/S. Normalmente, es el mismo que el puntero de datos que se pasó a la rutina de devolución de llamada posterior a la operación (PFLT_POST_OPERATION_CALLBACK) que llamó a FltDoCompletionProcessingWhenSafe.

[in] FltObjects

Puntero a la estructura de objetos relacionados (FLT_RELATED_OBJECTS) para la operación de E/S. Normalmente es el mismo que el puntero FltObjects que se pasó a la rutina de devolución de llamada de postoperación que llamó a FltDoCompletionProcessingWhenSafe.

[in, optional] CompletionContext

Puntero a una información de contexto proporcionada por el autor de la llamada que se pasará a la función de devolución de llamada especificada en el parámetro SafePostCallback .

[in] Flags

Máscara de bits de marcas que especifican cómo se realizará el procesamiento de finalización. Normalmente, es el mismo que el valor flags que se pasó a la rutina de devolución de llamada posterior a la operación que llamó a FltDoCompletionProcessingWhenSafe. Para obtener más información, vea la sección Comentarios que se muestra más adelante.

[in] SafePostCallback

Puntero a una rutina de devolución de llamada proporcionada por el autor de la llamada PFLT_POST_OPERATION_CALLBACK que el sistema operativo llama cuando es seguro hacerlo.

[out] RetPostOperationStatus

Variable asignada por el autor de la llamada que recibe el valor de estado final de la operación de E/S. Para obtener más información sobre cómo se establece este parámetro, vea la siguiente sección Comentarios.

Valor devuelto

FltDoCompletionProcessingWhenSafe devuelve TRUE si el procesamiento de finalización de la operación de E/S se puede realizar inmediatamente o la operación de E/S se publicó correctamente en un subproceso de trabajo; de lo contrario, devuelve FALSE.

Comentarios

FltDoCompletionProcessingWhenSafe ejecuta SafePostCallback inmediatamente si el autor de la llamada se ejecuta en IRQL <= APC_LEVEL. De lo contrario, si es seguro publicar la operación en un subproceso de trabajo, el procesamiento SafePostCallback se aplaza hasta que se pueda llamar en un contexto de subproceso donde IRQL <= APC_LEVEL.

Si IRQL < DISPATCH_LEVEL:

  • FltDoCompletionProcessingWhenSafe llama inmediatamente a la rutina de devolución de llamada SafePostCallback .
  • El parámetro RetPostOperationStatus recibe un valor de FLT_POSTOP_CALLBACK_STATUS devuelto por SafePostCallback.
  • FltDoCompletionProcessingWhenSafe devuelve TRUE.

Si IRQL >= DISPATCH_LEVEL:

  • FltDoCompletionProcessingWhenSafe intenta publicar la operación de E/S en un subproceso de trabajo y, a continuación, llama a la rutina SafePostCallback desde el subproceso de trabajo.
  • Si la operación de E/S podría publicarse de forma segura:
    • El administrador de filtros establece RetPostOperationStatus en FLT_POSTOP_MORE_PROCESSING_REQUIRED.
    • FltDoCompletionProcessingWhenSafe devuelve TRUE.
  • Si la operación de E/S no se pudo publicar de forma segura:
    • El administrador de filtros establece RetPostOperationStatus en FLT_POSTOP_FINISHED_PROCESSING.
    • FltDoCompletionProcessingWhenSafe devuelve FALSE.

Solo se puede llamar a FltDoCompletionProcessingWhenSafe para las operaciones basadas en IRP. Para determinar si la operación es una operación basada en IRP, use la macro FLT_IS_IRP_OPERATION .

FltDoCompletionProcessingWhenSafe no se puede usar para completar una operación de E/S de paginación en un subproceso de trabajo.

FltDoCompletionProcessingWhenSafe solo se puede llamar desde una rutina de devolución de llamada (PFLT_POST_OPERATION_CALLBACK) del controlador de minifiltro. Tenga en cuenta que Nunca se debe llamar a FltDoCompletionProcessingWhenSafe si el parámetro Flags de la devolución de llamada posterior a la operación tiene establecido el bit FLTFL_POST_OPERATION_DRAINING.

Si un minifiltro llama a FltDoCompletionProcessingWhenSafe y safePostCallback se invoca en un subproceso de trabajo porque no es seguro invocarlo en el contexto del subproceso actual, el administrador de filtros reanudará el procesamiento de finalización siempre que el minifiltro no devuelva FLT_POSTOP_MORE_PROCESSING_REQUIRED desde SafePostCallback.

Si el minifiltro devuelve FLT_POSTOP_MORE_PROCESSING_REQUIRED desde SafePostCallback, el minifiltro debe llamar a FltCompletePendedPostOperation para reanudar el procesamiento de finalización.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible en el paquete acumulativo de actualizaciones 1 de Microsoft Windows 2000 para SP4, Windows XP SP2, Windows Server 2003 SP1 y sistemas operativos posteriores. No está disponible en Windows 2000 SP4 y en sistemas operativos anteriores.
Plataforma de destino Universal
Encabezado fltkernel.h (incluya Fltkernel.h)
Library Fltmgr.lib
IRQL Cualquiera.

Consulte también

FLT_CALLBACK_DATA

FLT_IS_IRP_OPERATION

FLT_RELATED_OBJECTS

FltCancelIo

FltCompletePendedPostOperation

PFLT_POST_OPERATION_CALLBACK