Compartilhar via


Cancelando IRPs

Os drivers nos quais os IRPs podem permanecer na fila por um intervalo indefinido (para que um usuário possa cancelar uma solicitação de E/S enviada anteriormente) devem ter uma ou mais rotinas cancelar para concluir solicitações de E/S canceladas pelo usuário. Por exemplo, drivers de teclado, mouse, paralelo, serial e de dispositivo de som (ou drivers em camadas) e drivers do sistema de arquivos devem ter rotinas cancelar .

Os drivers para o Microsoft Windows XP e sistemas operacionais posteriores podem usar filas IRP cancel-safe em vez de implementar suas próprias rotinas cancelar .

"Cancelar um IRP" significa concluir o IRP o mais rápido possível, mantendo a integridade do sistema. Para obter uma discussão geral sobre a conclusão do IRP, consulte Concluindo IRPs.

O processo de cancelamento começa quando o sistema ou um driver chama IoCancelIrp. Essa rotina é chamada para cada IRP associado ao thread que ainda não foi totalmente concluído. O sistema cancelará IRPs não processados se o thread que iniciou a solicitação de E/S for encerrado. Os drivers podem cancelar somente os IRPs que eles criaram (consulte Criando IRPs para drivers de Lower-Level).)

Se um IRP cancelado não for concluído dentro de 5 minutos, o gerente de E/S considerará que o IRP atingiu o tempo limite. Esses IRPs são desassociados do thread e um erro é registrado para o dispositivo que atualmente possui o IRP. Você deve garantir que todas as solicitações que podem levar muito tempo para serem concluídas em seu driver sejam canceláveis. Para garantir que solicitações potencialmente longas sejam canceláveis, você pode usar filas IRP seguras para cancelamento ou a Estrutura de Driver do Modo Kernel, que abstrai o cancelamento do desenvolvedor do driver.

Esta seção fornece os seguintes tópicos:

Introdução às rotinas de cancelamento

Registrando uma rotina de cancelamento

Sincronizando o cancelamento de IRP

Implementando uma rotina de cancelamento

Pontos a serem considerados ao cancelar IRPs