Introdução a cancelar rotinas
Qualquer driver no qual os IRPs podem ser mantidos em um estado pendente por um intervalo indefinido deve ter uma ou mais rotinas de Cancelamento . Por exemplo, um driver de teclado pode esperar indefinidamente para que um usuário pressione uma tecla. Por outro lado, se um driver nunca enfileirar mais IRPs do que pode ser concluído em cinco minutos, provavelmente não precisará de uma rotina Cancelar .
Suponha que um thread de modo de usuário faça uma solicitação de E/S, que é enfileirada pela rotina de expedição de um driver de dispositivo de nível mais alto, e o thread solicitante seja encerrado enquanto o IRP está na fila. Os IRPs enfileirados em nome de um thread encerrado devem ser cancelados. Consequentemente, o driver deve definir uma rotina cancelar fornecida pelo driver em cada IRP que ele enfileira.
Um driver que cria IRPs associados deve cancelá-los quando o IRP master for cancelado. Como os IRPs associados não estão associados a um thread de solicitação, a rotina cancelar do master IRP é responsável por cancelar todos os IRPs associados quando o IRP master for cancelado.
O número de rotinas de cancelamento que qualquer driver tem depende do design do driver. Em geral, um driver deve ter uma rotina Cancelar para cada estágio em seu processamento de E/S no qual um IRP pode ser mantido em um estado pendente por um intervalo indefinido. Dizem que esses IRPs pendentes são mantidos em um estado cancelável.
Considere as seguintes diretrizes de design:
O driver de nível mais alto em uma cadeia de drivers em camadas deve ter pelo menos uma rotina Cancelar se enfileirar IRPs ou, de outra forma, conter IRPs em um estado cancelável. Ele pode ter mais de uma rotina cancelar , se necessário.
Os drivers de nível inferior nos quais os IRPs podem ser mantidos em um estado cancelável por intervalos relativamente longos também devem ter uma ou mais rotinas cancelar .
Se um driver gerenciar suas próprias filas internas de IRPs, ele deverá ter uma rotina de Cancelamento separada para cada uma de suas filas.
Alguns drivers de nível mais alto para dispositivos interativos, como teclado, mouse, som, classe paralela e drivers serial, devem ter rotinas cancelar . Alguns drivers de nível inferior, como um driver de porta paralela que contém IRPs enfileirados para alguns drivers de classe de nível superior para intervalos relativamente longos, também devem ter rotinas de Cancelamento .
É improvável que os drivers de dispositivo de armazenamento em massa, juntamente com drivers intermediários sobre eles, tenham rotinas de cancelamento . É responsabilidade de um driver do sistema de arquivos lidar com o cancelamento de solicitações de E/S de arquivo, enquanto a entrada de IRPs para drivers de armazenamento em massa de nível inferior geralmente é processada para conclusão muito rapidamente para ser cancelável.