PFLT_INSTANCE_TEARDOWN_CALLBACK función de devolución de llamada (fltkernel.h)

Un controlador de minifiltro puede registrar dos rutinas de tipo PFLT_INSTANCE_TEARDOWN_CALLBACK como las rutinas InstanceTeardownStartCallback e InstanceTeardownCompleteCallback del controlador de minifiltro.

Sintaxis

PFLT_INSTANCE_TEARDOWN_CALLBACK PfltInstanceTeardownCallback;

void PfltInstanceTeardownCallback(
  [in] PCFLT_RELATED_OBJECTS FltObjects,
  [in] FLT_INSTANCE_TEARDOWN_FLAGS Reason
)
{...}

Parámetros

[in] FltObjects

Puntero a una estructura de FLT_RELATED_OBJECTS que contiene punteros opacos para los objetos relacionados con la operación de E/S actual.

[in] Reason

Marca que indica por qué se está desactivando la instancia del controlador de minifiltro. Uno de los siguientes:

Marca Significado
FLTFL_INSTANCE_TEARDOWN_MANUAL (0x00000001) La instancia se está desasociando porque una aplicación en modo de usuario ha llamado FilterDetach o un componente en modo kernel ha llamado FltDetachVolume.
FLTFL_INSTANCE_TEARDOWN_FILTER_UNLOAD (0x00000002) El controlador de minifiltro se está descargando.
FLTFL_INSTANCE_TEARDOWN_MANDATORY_FILTER_UNLOAD (0x00000004) El controlador de minifiltro se está descargando.
FLTFL_INSTANCE_TEARDOWN_VOLUME_DISMOUNT (0x00000008) Si se establece, el volumen se está desmontando. (O el volumen ya se ha desmontado. O se produjo un error en la operación de montaje del volumen. O bien, la instancia del controlador de minifiltro o el volumen se está descomponiéndose. O bien, el sistema de archivos se anule el registro como un sistema de archivos activo).
FLTFL_INSTANCE_TEARDOWN_INTERNAL_ERROR (0x00000010) El sistema experimentó un error interno inesperado.

Valor devuelto

None

Observaciones

Cuando un controlador de minifiltro se registra a sí mismo llamando a FltRegisterFilter desde su rutina DriverEntry , puede registrar dos rutinas de tipo PFLT_INSTANCE_TEARDOWN_CALLBACK como las rutinas InstanceTeardownStartCallback e InstanceTeardownCompleteCallback del controlador de minifiltro. Para registrar estas rutinas de devolución de llamada, el controlador de minifiltro almacena las direcciones de las dos rutinas de tipo PFLT_INSTANCE_TEARDOWN_CALLBACK en los miembros InstanceTeardownStartCallback e InstanceTeardownCompleteCallback de la estructura FLT_REGISTRATION que el controlador de minifiltro pasa como parámetro Registration de FltRegisterFilter.

Las rutinas InstanceTeardownStartCallback e InstanceTeardownCompleteCallback son opcionales y pueden ser NULL. Si el controlador de minifiltro especifica NULL para la rutina InstanceTeardownStartCallback o InstanceTeardownCompleteCallback , la instancia todavía se descompone.

Se llama a la rutina InstanceTeardownStartCallback cuando el administrador de filtros comienza a anular una instancia del controlador de minifiltro para permitir que el controlador de minifiltro complete las operaciones de E/S en lápiz y guarde la información de estado.

La rutina InstanceTeardownStartCallback debe:

  • Llame a FltCompletePendedPreOperation para cada operación de E/S que se haya anexado en la rutina de devolución de llamada de preoperación del controlador minifiltro para completar la operación o devolver el control de la operación al administrador de filtros.
  • No se han lápiz las nuevas operaciones de E/S. Si el controlador de minifiltro usa una cola de datos de devolución de llamada, debe llamar a FltCbdqDisable para deshabilitarla.
  • Llame a FltCompletePendedPostOperation para cada operación de E/S que se ha lápiz en la rutina de devolución de llamada de postoperación del controlador minifiltro para devolver el control de la operación al administrador de filtros.

La rutina InstanceTeardownStartCallback puede, opcionalmente, hacer lo siguiente para permitir que el controlador de minifiltro se descargue lo antes posible:

  • Cierre los archivos abiertos.
  • Asegúrese de que los subprocesos de trabajo realizan solo el mínimo necesario para completar el procesamiento de elementos de trabajo pendientes.
  • Llame a FltCancelIo para cancelar las operaciones de E/S iniciadas por el controlador de minifiltro.
  • Detenga la puesta en cola de nuevos elementos de trabajo.

Una vez que se llama a la rutina InstanceTeardownStartCallback del controlador de minifiltro, no se llama a las rutinas de devolución de llamada del controlador de minifiltro y postoperación para ninguna operación de E/S nueva. Sin embargo, se pueden llamar para las operaciones de E/S que se iniciaron antes de que se iniciara la desmontaje de la instancia.

Se llama a la rutina InstanceTeardownCompleteCallback cuando se completa el proceso de desmontaje para permitir que el controlador de minifiltro cierre los archivos abiertos y realice cualquier otro procesamiento de limpieza necesario.

La rutina InstanceTeardownCompleteCallback debe cerrar los archivos abiertos por el controlador de minifiltro.

El administrador de filtros llama a la rutina InstanceTeardownCompleteCallback del controlador de minifiltro solo después de que se hayan completado o purgado todas las operaciones de E/S pendientes.

Advertencia

No se llamará a la rutina InstanceTeardownCompleteCallback si se cumple alguna de las condiciones siguientes:

  • Hay operaciones de E/S pendientes.
  • Hay operaciones de E/S pendientes iniciadas por el controlador de minifiltro.

Si la instancia del controlador de minifiltro se está desactivando porque el controlador de minifiltro se está descargando, la operación de descarga parece bloquearse hasta que se devuelva la rutina InstanceTeardownCompleteCallback . Para depurar estos tipos de problemas, debe habilitar el Comprobador de controladores en el controlador de minifiltro. La opción Comprobación de E/S del comprobador de filtros puede ayudar a identificar posibles causas, como referencias no filtradas, lo que impediría que el controlador de minifiltro se descargue. Para obtener más información, vea Filter Verifier.

Tenga en cuenta que hacer referencia a la instancia (llamando a FltObjectReference) no impide que se llame a la rutina InstanceTeardownCompleteCallback .

El administrador de filtros llama a las rutinas InstanceTeardownStartCallback e InstanceTeardownCompleteCallback en irQL PASSIVE_LEVEL.

Requisitos

Requisito Value
Plataforma de destino Escritorio
Encabezado fltkernel.h (incluya Fltkernel.h)
IRQL vea la sección Comentarios.

Consulte también

FLT_REGISTRATION

FLT_RELATED_OBJECTS

FilterDetach

FltCancelIo

FltCbdqDisable

FltCompletePendedPostOperation

FltCompletePendedPreOperation

FltDetachVolume

FltObjectReference

FltRegisterFilter

PFLT_INSTANCE_QUERY_TEARDOWN_CALLBACK

PFLT_INSTANCE_SETUP_CALLBACK