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