Función IoSetCancelRoutine (wdm.h)

La rutina IoSetCancelRoutine configura una rutina Cancel proporcionada por el controlador que se llamará si se cancela un IRP determinado.

Sintaxis

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

Parámetros

[in] Irp

Puntero al IRP que se coloca o quita de un estado cancelable.

[in] CancelRoutine

Especifica el punto de entrada de la rutina Cancel proporcionada por el autor de la llamada que se va a llamar si se cancela el IRP especificado o es NULL si el IRP especificado se quita del estado cancelable. Esta rutina se declara de la siguiente manera:

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

Valor devuelto

IoSetCancelRoutine devuelve el valor anterior de Irp-CancelRoutine>. Si no se estableció previamente ninguna rutina Cancel o si la cancelación de IRP ya está en curso, IoSetCancelRoutine devuelve NULL.

Comentarios

Esta rutina puede deshabilitar la rutina Cancel establecida actualmente en un IRP.

Un controlador debe contener el bloqueo de número de cancelación del sistema al llamar a esta rutina si el controlador usa la cola de dispositivos proporcionada por el administrador de E/S en el objeto de dispositivo. El controlador se ejecuta en IRQL = DISPATCH_LEVEL después de llamar a IoAcquireCancelSpinLock hasta que libera el bloqueo de número de cancelación con IoReleaseCancelSpinLock.

Si el controlador administra sus propias colas de IRP, el controlador no debe contener el bloqueo de giro de cancelación al llamar a esta rutina. IoSetCancelRoutine usa un intrínseco de intercambio interbloqueado para establecer la dirección de la rutina Cancel como una operación atómica. El uso reducido del bloqueo de giro de cancelación puede mejorar el rendimiento del controlador y el rendimiento general del sistema.

Las rutinas de cancelación del controlador se llaman en IRQL = DISPATCH_LEVEL con el bloqueo de giro de cancelación mantenido. La rutina Cancel debe liberar el bloqueo de número de cancelación antes de que devuelva el control.

Requisitos

Requisito Value
Plataforma de destino Escritorio
Encabezado wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL DISPATCH_LEVEL (consulte la sección Comentarios)
Reglas de cumplimiento de DDI IrpCancelField(wdm), StartIoCancel(wdm)

Consulte también

IoAcquireCancelSpinLock

IoReleaseCancelSpinLock