Compartilhar via


Função IoSetCancelRoutine (wdm.h)

A rotina de IoSetCancelRoutine configura uma rotina de cancelamento de 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 de Cancelar fornecida pelo chamador a ser chamada se o IRP especificado for cancelado ou 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
    );

Valor de retorno

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.

Observações

Essa rotina pode desabilitar a rotina Cancelar atualmente definida 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 intertrínseca intrínseca para definir o endereço da rotina Cancelar como uma operação atômica. A redução do uso do bloqueio de rotação de cancelamento pode melhorar o desempenho do driver e o desempenho geral do sistema.

As rotinas de cancelar de 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
da Plataforma de Destino Área de trabalho
cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
biblioteca NtosKrnl.lib
de DLL NtosKrnl.exe
IRQL DISPATCH_LEVEL (consulte a seção Comentários)
regras de conformidade de DDI IrpCancelField(wdm), StartIoCancel(wdm)

Consulte também

IoAcquireCancelSpinLock

IoReleaseCancelSpinLock