Funzione IoSetCancelRoutine (wdm.h)

La routine IoSetCancelRoutine configura una routine Cancel fornita dal driver da chiamare se viene annullato un determinato IRP.

Sintassi

C++
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 del chiamante fornito routine Cancel da chiamare se l'IRP specificato viene annullato o viene NULL se l'IRP specificato viene rimosso dallo stato annullabile. Questa routine viene dichiarata come segue:

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

Valore restituito

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

Osservazioni

Questa routine può disabilitare la routine annulla attualmente impostata in un IRP.

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

Se il driver gestisce le proprie code di runtime di integrazione, il driver non deve tenere premuto il blocco di selezione annulla quando si chiama questa routine. IoSetCancelRoutine usa un intrinseco scambio interlocked per impostare l'indirizzo della routine cancel come operazione atomica. Riduzione dell'utilizzo del blocco di selezione annulla può migliorare le prestazioni del driver e le prestazioni complessive del sistema.

Le routine cancel driver vengono chiamate in IRQL = DISPATCH_LEVEL con il blocco di annullamento dello spin tenuto. La routine annulla deve rilasciare il blocco di selezione annulla prima di restituire il controllo .

Fabbisogno

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)

Vedere anche

IoAcquireCancelSpinLock

IoReleaseCancelSpinLock