Registrando uma rotina de cancelamento
Se um driver de dispositivo tiver uma rotina StartIo , suas rotinas de expedição poderão registrar uma rotina Cancelar fornecendo seu endereço como entrada para IoStartPacket.
Se um driver não tiver uma rotina StartIo , suas rotinas de expedição deverão fazer o seguinte antes de enfileirar um IRP para processamento adicional por outras rotinas de driver:
Chame IoAcquireCancelSpinLock.
Chame IoSetCancelRoutine com o IRP de entrada e o ponto de entrada para uma rotina cancelar fornecida pelo driver.
Chame IoReleaseCancelSpinLock.
Para obter informações sobre o bloqueio de rotação de cancelamento, consulte Usando o bloqueio de rotação de cancelamento do sistema.
Os drivers que gerenciam suas próprias filas de IRPs, em vez de usar a fila de dispositivos fornecida pelo gerente de E/S, não precisam adquirir o bloqueio de rotação de cancelamento ao chamar IoSetCancelRoutine. No entanto, esses drivers devem marcar o ponteiro de rotina Cancelar que IoSetCancelRoutine retorna para determinar se a rotina Cancelar já foi iniciada.