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) |