Condividi tramite


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