Función FltPerformAsynchronousIo (fltkernel.h)

Un controlador de minifiltro llama a FltPerformAsynchronousIo para iniciar una operación de E/S asincrónica.

Sintaxis

NTSTATUS FLTAPI FltPerformAsynchronousIo(
  [in, out] PFLT_CALLBACK_DATA               CallbackData,
  [in]      PFLT_COMPLETED_ASYNC_IO_CALLBACK CallbackRoutine,
  [in]      PVOID                            CallbackContext
);

Parámetros

[in, out] CallbackData

Puntero a una estructura de datos de devolución de llamada (FLT_CALLBACK_DATA) asignada por una llamada anterior a FltAllocateCallbackData. Este parámetro es obligatorio y no puede ser NULL. El autor de la llamada es responsable de liberar esta estructura cuando ya no es necesario llamando a FltFreeCallbackData.

[in] CallbackRoutine

Puntero a una rutina de devolución de llamada con tipo PFLT_COMPLETED_ASYNC_IO_CALLBACK que se llamará cuando se complete la operación de E/S. Nota: El Administrador de filtros llama a esta rutina después de llamar a las rutinas de devolución de llamada de postoperación (PFLT_POST_OPERATION_CALLBACK) de cualquier controlador de minifiltro cuyas instancias se adjunte debajo de la instancia de inicio (especificada en el parámetro Instance para FltAllocateCallbackData). Este parámetro es obligatorio y no puede ser NULL. El Administrador de filtros siempre llama a esta rutina, incluso cuando Se produce un error en FltPerformAsynchronousIo .

[in] CallbackContext

Puntero de contexto que se va a pasar a CallbackRoutine Este parámetro es opcional y puede ser NULL.

Valor devuelto

FltPerformAsynchronousIo devuelve STATUS_SUCCESS para indicar que el sistema de archivos completó la operación de E/S y la rutina de devolución de llamada a la que se ha llamado a CallbackRoutine . De lo contrario, devuelve un valor NTSTATUS adecuado, como uno de los siguientes:

Código devuelto Descripción
STATUS_FLT_INVALID_ASYNCHRONOUS_REQUEST IRP_MJ_CREATE las solicitudes no se pueden realizar de forma asincrónica. Se trata de un código de error.
STATUS_PENDING La operación devolvió STATUS_PENDING. El Administrador de filtros llamará a la rutina de devolución de llamada a la que CallbackRoutine apunta cuando se complete la operación de E/S. Este código indica solo que se inició la operación.
STATUS_FLT_IO_COMPLETE La operación se completó mediante la rutina de devolución de llamada de preoperación del controlador de minifiltro cuyas instancias se adjuntan debajo de la instancia de inicio.

Comentarios

Un controlador de minifiltro llama a FltPerformAsynchronousIo para iniciar una operación de E/S asincrónica después de llamar a FltAllocateCallbackData para asignar una estructura de datos de devolución de llamada para la operación.

FltPerformAsynchronousIo envía la operación de E/S solo a las instancias del controlador de minifiltro adjuntas debajo de la instancia de inicio (especificada en el parámetro Instance a FltAllocateCallbackData) y al sistema de archivos. Los controladores de minifiltro conectados encima de la instancia especificada no reciben la operación de E/S.

Los controladores de minifiltro solo pueden iniciar operaciones de E/S basadas en IRP. No pueden iniciar operaciones de devolución de llamada de E/S rápidas o de filtro del sistema de archivos (FSFilter).

Los controladores de minifiltro deben usar FltPerformAsynchronousIo solo para las operaciones asincrónicas de E/S para las que no se pueden usar rutinas como las siguientes:

IRP_MJ_CREATE las solicitudes no se pueden realizar de forma asincrónica.

La estructura de datos de devolución de llamada (FLT_CALLBACK_DATA) se puede liberar o reutilizar en cualquier momento después de llamar a la rutina de devolución de llamada a la que apunta CallbackRoutine . El autor de la llamada puede liberar la estructura de datos de devolución de llamada llamando a FltFreeCallbackData o prepararla para su reutilización llamando a FltReuseCallbackData.

Nota

STATUS_SUCCESS y STATUS_FLT_IO_COMPLETE indican que se completó la operación de E/S, pero no indican el estado final de la operación de E/S. Para determinar el estado real de la operación devuelto por los controladores de minifiltro subyacentes, los controladores de filtro y el sistema de archivos, callbackRoutine debe examinar el miembro IoStatus de la estructura de datos de devolución de llamada recibida en el parámetro CallbackRoutine callbackContext.

Dado que el Administrador de filtros siempre llama a la rutina de devolución de llamada a la que CallbackRoutine apunta, incluso cuando FltPerformAsynchronousIo produce un error, el controlador de minifiltro puede realizar las operaciones de liberar o reutilizar directamente en la rutina de devolución de llamada.

El autor de la llamada de FltPerformAsynchronousIo se puede ejecutar en IRQL <= APC_LEVEL si la marca de IRP_PAGING_IO está establecida en el miembro IrpFlags de la estructura FLT_IO_PARAMETER_BLOCK para la operación. (Esta marca solo es válida para las operaciones de IRP_MJ_READ, IRP_MJ_WRITE, IRP_MJ_QUERY_INFORMATION y IRP_MJ_SET_INFORMATION). De lo contrario, el autor de la llamada debe ejecutarse en irQL PASSIVE_LEVEL.

Requisitos

Requisito Value
Plataforma de destino Universal
Encabezado fltkernel.h (incluya Fltkernel.h)
Library FltMgr.lib
Archivo DLL Fltmgr.sys
IRQL vea la sección Comentarios.

Consulte también

FLT_CALLBACK_DATA

FLT_IO_PARAMETER_BLOCK

FltAllocateCallbackData

FltFreeCallbackData

FltPerformSynchronousIo

FltReuseCallbackData

IRP_MJ_CREATE

PFLT_COMPLETED_ASYNC_IO_CALLBACK

PFLT_POST_OPERATION_CALLBACK