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 necesario y no se puede 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_CALLBACKque 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 los controladores de minifiltros cuyas instancias se adjuntan debajo de la instancia de inicio (especificada en el parámetro instancia de para FltAllocateCallbackData). Este parámetro es necesario y no se puede null. El Administrador de filtros siempre llama a esta rutina, incluso cuando FltPerformAsynchronousIo produce un error.
[in] CallbackContext
Puntero de contexto que se va a pasar al CallbackRoutine Este parámetro es opcional y se puede 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 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 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 que CallbackRoutine apunta a 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. |
Observaciones
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 adjuntos 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 de sistema de archivos (FSFilter).
Los controladores de minifiltro deben usar FltPerformAsynchronousIo solo para las operaciones de E/S asincrónicas para las que no se pueden usar rutinas como las siguientes:
IRP_MJ_CREATE 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 que se haya llamado a la rutina de devolución de llamada que CallbackRoutine apunta a . El autor de la llamada puede liberar la estructura de datos de devolución de llamada llamando a FltFreeCallbackData o prepararlo 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, el CallbackRoutine debe examinar el ioStatus miembro de la estructura de datos de devolución de llamada recibida en el CallbackRoutineel parámetro 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 eliminación o reutilización 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 de FLT_IO_PARAMETER_BLOCK para la operación. (Esta marca solo es válida para las operaciones 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 | Valor |
---|---|
de la plataforma de destino de | Universal |
encabezado de | fltkernel.h (incluya Fltkernel.h) |
biblioteca de | FltMgr.lib |
DLL de | Fltmgr.sys |
irQL | Consulte la sección Comentarios. |