Compartir a través de


Asegurarse de que el procesamiento de finalización se realiza en IRQL seguro

Como se indicó en Escritura de rutinas de devolución de llamada postoperación, se puede llamar a la rutina de devolución de llamada de postoperación para una operación de E/S basada en IRP en IRQL = DISPATCH_LEVEL, a menos que la rutina de devolución de llamada de preoperación del controlador minifiltro sincronice la operación devolviendo FLT_PREOP_SYNCHRONIZE o la operación es una operación de creación, que es intrínsecamente sincrónica. (Para obtener más información sobre este valor devuelto, vea Devolver FLT_PREOP_SYNCHRONIZE).

Sin embargo, para las operaciones de E/S basadas en IRP que aún no están sincronizadas, los controladores de minifiltro pueden usar para dos técnicas para asegurarse de que el procesamiento de finalización se realiza en IRQL <= APC_LEVEL.

La primera técnica es para la rutina de devolución de llamada posterior a la operación de E/S en la que se puede realizar la operación de E/S hasta que se pueda realizar el procesamiento de finalización en IRQL <= APC_LEVEL. Esta técnica se describe en Pendiente de una operación de E/S en una rutina de devolución de llamada posterior a la operación.

La segunda técnica es para la rutina de devolución de llamada de postoperación del controlador minifiltro para llamar a FltDoCompletionProcessingWhenSafe. FltDoCompletionProcessingWhenSafe lápiz la operación de E/S solo si el IRQL actual es >= DISPATCH_LEVEL. De lo contrario, esta rutina ejecuta inmediatamente la rutina SafePostCallback del controlador de minifiltro. Esta técnica se describe en FltDoCompletionProcessingWhenSafe.