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. |