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