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