Registro de una rutina de cancelación
Si un controlador de dispositivo tiene una rutina StartIo , sus rutinas de envío pueden registrar una rutina Cancel proporcionando su dirección como entrada a IoStartPacket.
Si un controlador no tiene una rutina StartIo , sus rutinas de envío deben hacer lo siguiente antes de poner en cola un IRP para su posterior procesamiento por parte de otras rutinas de controlador:
Llame a IoAcquireCancelSpinLock.
Llame a IoSetCancelRoutine con el IRP de entrada y el punto de entrada de una rutina Cancel proporcionada por el controlador.
Llame a IoReleaseCancelSpinLock.
Para obtener información sobre el bloqueo de giro de cancelación, consulte Uso del bloqueo de número de cancelación del sistema.
Los controladores que administran sus propias colas de IRP, en lugar de usar la cola de dispositivos proporcionada por el administrador de E/S, no necesitan adquirir el bloqueo de número de cancelación al llamar a IoSetCancelRoutine. Sin embargo, estos controladores deben comprobar el puntero rutina Cancelar que IoSetCancelRoutine devuelve para determinar si la rutina Cancel ya se ha iniciado.