Compartir a través de


Introducción a las rutinas de cancelación

Cualquier controlador en el que los IRP se pueden mantener en un estado pendiente para un intervalo indefinido debe tener una o varias rutinas Cancel . Por ejemplo, un controlador de teclado podría esperar indefinidamente a que un usuario presione una tecla. Por el contrario, si un controlador nunca pondrá en cola más IRP de lo que puede completarse en cinco minutos, probablemente no necesite una rutina Cancelar .

Supongamos que un subproceso en modo de usuario realiza una solicitud de E/S, que está en cola mediante una rutina de distribución del controlador de dispositivo de nivel superior y que el subproceso solicitante finaliza mientras se pone en cola el IRP. Los IRP en cola en nombre de un subproceso terminado deben cancelarse. Por lo tanto, el controlador debe establecer una rutina Cancel proporcionada por el controlador en cada IRP que pone en cola.

Un controlador que cree IRP asociados debe cancelarlos cuando se cancele el IRP maestro. Dado que los IRP asociados no están asociados a un subproceso solicitante, la rutina Cancel de IRP maestra es responsable de cancelar las IRP asociadas cuando se cancela el IRP maestro.

El número de rutinas Cancel que cualquier controlador tiene depende del diseño del controlador. En general, un controlador debe tener una rutina Cancel para cada fase del procesamiento de E/S en la que un IRP podría mantenerse en un estado pendiente durante un intervalo indefinido. Se dice que estos IRP pendientes se mantienen en un estado cancelable.

Tenga en cuenta las siguientes directrices de diseño:

  • El controlador de nivel más alto de una cadena de controladores en capas debe tener al menos una rutina Cancel si pone en cola irP o contiene IRP en un estado cancelable. Puede tener más de una rutina Cancel , si es necesario.

  • Los controladores de nivel inferior en los que los IRP se pueden mantener en un estado cancelable durante intervalos relativamente largos también deben tener una o varias rutinas cancel .

  • Si un controlador administra sus propias colas internas de IRP, debe tener una rutina Cancel independiente para cada una de sus colas.

Algunos controladores de nivel superior para dispositivos interactivos, como el teclado, el mouse, el sonido, la clase paralela y los controladores serie, deben tener rutinas Cancel . Algunos controladores de nivel inferior, como un controlador de puerto paralelo que contiene IRP en cola para algún número de controladores de clase de nivel superior durante intervalos relativamente largos, también deben tener rutinas Cancel .

Es poco probable que los controladores de dispositivos de almacenamiento masivo, junto con los controladores intermedios superpuestas, tengan rutinas cancel . Es responsabilidad de un controlador del sistema de archivos controlar la cancelación de las solicitudes de E/S de archivos, mientras que la entrada irP a los controladores de almacenamiento masivo de nivel inferior normalmente se procesan para que se completen demasiado rápidamente para poder cancelarse.