Função IoSetCancelRoutine (wdm.h)

A rotina IoSetCancelRoutine configura uma rotina cancel fornecida pelo driver para ser chamada se um determinado IRP for cancelado.

Sintaxe

PDRIVER_CANCEL IoSetCancelRoutine(
  [in] PIRP           Irp,
  [in] PDRIVER_CANCEL CancelRoutine
);

Parâmetros

[in] Irp

Ponteiro para o IRP que está sendo colocado ou removido de um estado cancelável.

[in] CancelRoutine

Especifica o ponto de entrada da rotina Cancelar fornecida pelo chamador a ser chamada se o IRP especificado for cancelado ou for NULL se o IRP fornecido estiver sendo removido do estado cancelável. Essa rotina é declarada da seguinte maneira:

VOID
(*PDRIVER_CANCEL)(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    );

Retornar valor

IoSetCancelRoutine retorna o valor anterior de Irp-CancelRoutine>. Se nenhuma rotina cancelar tiver sido definida anteriormente ou se o cancelamento de IRP já estiver em andamento, IoSetCancelRoutine retornará NULL.

Comentários

Essa rotina pode desabilitar a rotina Cancelar definida atualmente em um IRP.

Um driver deve manter o bloqueio de rotação de cancelamento do sistema ao chamar essa rotina se o driver usar a fila de dispositivos fornecida pelo gerenciador de E/S no objeto do dispositivo. O driver é executado em IRQL = DISPATCH_LEVEL depois de chamar IoAcquireCancelSpinLock até que ele libere o bloqueio de rotação de cancelamento com IoReleaseCancelSpinLock.

Se o driver gerenciar suas próprias filas de IRPs, o driver não precisará manter o bloqueio de rotação de cancelamento ao chamar essa rotina. IoSetCancelRoutine usa uma troca interligada intrínseca para definir o endereço da rotina Cancelar como uma operação atômica. O uso reduzido do bloqueio de rotação de cancelamento pode melhorar o desempenho do driver e o desempenho geral do sistema.

As rotinas de cancelamento do driver são chamadas em IRQL = DISPATCH_LEVEL com o bloqueio de rotação de cancelamento mantido. A rotina Cancelar deve liberar o bloqueio de rotação de cancelamento antes de retornar o controle.

Requisitos

Requisito Valor
Plataforma de Destino Área de Trabalho
Cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL DISPATCH_LEVEL (consulte a seção Comentários)
Regras de conformidade de DDI IrpCancelField(wdm), StartIoCancel(wdm)

Confira também

IoAcquireCancelSpinLock

IoReleaseCancelSpinLock