Funzione IoSetCancelRoutine (wdm.h)

La routine IoSetCancelRoutine configura una routine Cancel fornita dal driver da chiamare se viene annullata una determinata IRP.

Sintassi

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

Parametri

[in] Irp

Puntatore all'IRP inserito o rimosso da uno stato annullabile.

[in] CancelRoutine

Specifica il punto di ingresso della routine Cancel fornita dal chiamante da chiamare se l'IRP specificato viene annullato o è NULL se l'IRP specificato viene rimosso dallo stato annullabile. Questa routine viene dichiarata come segue:

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

Valore restituito

IoSetCancelRoutine restituisce il valore precedente di Irp-CancelRoutine>. Se non è stata impostata alcuna routine Cancel in precedenza o se l'annullamento di IRP è già in corso, IoSetCancelRoutine restituisce NULL.

Commenti

Questa routine può disabilitare la routine Cancel attualmente impostata in un'istanza di IRP.

Un driver deve contenere il blocco spin spin del sistema quando si chiama questa routine se il driver usa la coda del dispositivo fornita da gestione I/O nell'oggetto dispositivo. Il driver viene eseguito in IRQL = DISPATCH_LEVEL dopo aver chiamato IoAcquireCancelSpinLock finché non rilascia il blocco spin annulla con IoReleaseCancelSpinLock.

Se il driver gestisce le proprie code di IRP, il driver non deve contenere il blocco di rotazione annulla quando si chiama questa routine. IoSetCancelRoutine usa un intrinseco scambio interlocked per impostare l'indirizzo della routine Cancel come operazione atomica. L'utilizzo ridotto del blocco di spin spin annulla può migliorare le prestazioni del driver e le prestazioni complessive del sistema.

Le routine Di annullamento driver vengono chiamate in IRQL = DISPATCH_LEVEL con il blocco di rotazione annulla mantenuto. La routine Annulla deve rilasciare il blocco di rotazione annulla prima di restituire il controllo.

Requisiti

Requisito Valore
Piattaforma di destinazione Desktop
Intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL DISPATCH_LEVEL (vedere la sezione Osservazioni)
Regole di conformità DDI IrpCancelField(wdm), StartIoCancel(wdm)

Vedi anche

IoAcquireCancelSpinLock

IoReleaseCancelSpinLock