Partilhar via


Registrando uma rotina de cancelamento

Se um driver de dispositivo tiver uma rotina StartIo, as suas rotinas de despacho podem registrar uma rotina Cancel fornecendo o seu endereço como entrada para IoStartPacket.

Se um driver não tiver uma rotina StartIo, as suas rotinas de despacho devem fazer o seguinte antes de enfileirar um IRP para processamento adicional por outras rotinas do driver:

  1. Ligue IoAcquireCancelSpinLock.

  2. Ligue IoSetCancelRoutine com o IRP de entrada e o ponto de entrada para uma rotina Cancel fornecida pelo driver.

  3. Ligue IoReleaseCancelSpinLock.

Para obter informações sobre o bloqueio de espera de cancelamento, consulte Usando o bloqueio de espera de cancelamento do sistema.

Os drivers que gerem as suas próprias filas de IRPs, em vez de usar a fila de dispositivos fornecida pelo gestor de E/S, não precisam adquirir o spin lock de cancelamento ao chamar IoSetCancelRoutine. No entanto, esses drivers devem verificar o ponteiro da rotina Cancel que IoSetCancelRoutine retorna para determinar se a rotina Cancel já foi iniciada.