Funzione KsAddIrpToCancelableQueue (ks.h)
La funzione KsAddIrpToCancelableQueue aggiunge un'IRP a una coda di IRP annullabili, consentendo quindi l'annullamento dell'IRP. Se l'IRP è stato impostato in precedenza su uno stato annullato, la funzione KsAddIrpToCancelableQueue completa l'annullamento di tale IRP.
Sintassi
KSDDKAPI VOID KsAddIrpToCancelableQueue(
[in, out] PLIST_ENTRY QueueHead,
[in] PKSPIN_LOCK SpinLock,
[in] PIRP Irp,
[in] KSLIST_ENTRY_LOCATION ListLocation,
[in, optional] PDRIVER_CANCEL DriverCancel
);
Parametri
[in, out] QueueHead
Specifica l'archiviazione allocata dal driver per l'head della coda in cui aggiungere l'IRP.
[in] SpinLock
Punta al blocco di rotazione del driver per l'accesso alla coda specificata in QueueHead. Una copia di questo puntatore viene mantenuta nel KSQUEUE_SPINLOCK_IRP_STORAGE(Irp) dell'IRP dell'IRP per l'uso dalla routine annulla, se necessario.
[in] Irp
Specifica l'IRP da aggiungere alla coda specificata in QueueHead.
[in] ListLocation
Indica se l'IRP deve essere posizionato all'inizio o alla fine della coda. Questo valore deve essere KsListEntryTail o KsListEntryHead.
[in, optional] DriverCancel
Parametro facoltativo che specifica una routine di annullamento fornita dal driver da usare. Se si tratta di NULL, viene usato lo standard KsCancelRoutine .
Valore restituito
nessuno
Osservazioni
Se l'IRP è stato inserito in uno stato di annullamento quando questa routine viene chiamata, KsAddIrpToCancelableQueue chiamerà immediatamente la routine di annullamento specificata in DriverCancel oppure se non viene specificata alcuna routine in DriverCancel la routine di annullamento di streaming predefinita viene chiamata.
La funzione KsAddIrpToCancelableQueue consente l'annullamento anche prima di essere inserita in un elenco di annullamento o quando viene spostata da un elenco a un altro. Questa funzione può essere chiamata a livello di IRQ DISPATCH_LEVEL o inferiore a meno che la coda allocata dal driver e tutte le voci nella coda siano residenti nel sistema o allocate dall'archiviazione residente.
La funzione non usa il blocco di rotazione annulla per aggiungere elementi all'elenco. L'accesso all'elenco viene sincronizzato usando il blocco spin fornito e si basa su operazioni atomiche su Irp-CancelRoutine>.
Requisiti
Requisito | Valore |
---|---|
Piattaforma di destinazione | Universale |
Intestazione | ks.h (include Ks.h) |
Libreria | Ks.lib |