Funzione KsMoveIrpsOnCancelableQueue (ks.h)
La funzione KsMoveIrpsOnCancelableQueue sposta i runtime di integrazione specificati dal parametro SourceList al parametro DestinationList a seconda del valore restituito dalla funzione KStrIrpListCallback definita dal minidriver.
Sintassi
KSDDKAPI NTSTATUS KsMoveIrpsOnCancelableQueue(
[in, out] PLIST_ENTRY SourceList,
[in] PKSPIN_LOCK SourceLock,
[in, out] PLIST_ENTRY DestinationList,
[in, optional] PKSPIN_LOCK DestinationLock,
[in] KSLIST_ENTRY_LOCATION ListLocation,
[in] PFNKSIRPLISTCALLBACK ListCallback,
[in] PVOID Context
);
Parametri
[in, out] SourceList
Specifica l'intestazione della coda da cui rimuovere i punti di integrazione.
[in] SourceLock
Puntatore al blocco spin del driver per l'accesso alla coda di origine.
[in, out] DestinationList
Specifica l'intestazione della coda in cui aggiungere i punti di integrazione.
[in, optional] DestinationLock
Facoltativamente, contiene un puntatore al blocco spin del driver per l'accesso alla coda di destinazione. Se non viene specificato, si presuppone che il parametro SourceLock controlli entrambe le code. Se specificato, questo blocco viene sempre acquisito dopo il parametro SourceLock . Se l'elenco di destinazione ha un blocco spin separato, il blocco di selezione annulla a livello di sistema viene acquisito per primo per spostare i punti di integrazione e consentire l'aggiornamento del blocco spin KSQUEUE_SPINLOCK_IRP_STORAGE().
[in] ListLocation
Indica se gli IRP devono essere enumerati dalla parte head o dalla parte finale della coda di origine. Tutti i provider di integrazione spostati vengono posizionati sull'estremità opposta della coda di destinazione in modo che l'ordinamento venga mantenuto.
[in] ListCallback
Specifica la funzione KStrIrpListCallback definita dal minidriver da chiamare per indicare se un IRP specifico deve essere spostato da SourceList a DestinationList o se l'enumerazione deve essere terminata.
[in] Context
Contesto passato a ListCallback.
Valore restituito
Restituisce STATUS_SUCCESS se l'elenco è stato completamente enumerato; in caso contrario, restituisce qualsiasi avviso o errore restituito dalla funzione di callback KStrIrpListCallback definita dal minidriver che ha interrotto l'enumerazione.
Commenti
Un oggetto IRP viene spostato se la funzione KStrIrpListCallback indica che deve essere spostata, indipendentemente dal fatto che sia attualmente acquisita. Se KStrIrpListCallback restituisce STATUS_SUCCESS, l'IRP viene spostato. Se restituisce STATUS_NO_MATCH, l'IRP non viene spostato. Qualsiasi altro valore di avviso o errore restituito terminerà l'enumerazione e verrà restituita dalla funzione. Il valore STATUS_NO_MATCH non deve essere restituito come errore da KStrIrpListCallback. KStrIrpListCallback viene chiamato in DISPATCH_LEVEL. KStrIrpListCallback viene sempre chiamato almeno una volta alla fine con un valore IRP NULL per completare l'enumerazione dell'elenco.
KsMoveIrpsOnCancelableQueue continua fino a quando la funzione di callback non indica che la ricerca deve essere terminata o viene raggiunta la fine dell'elenco. KsMoveIrpsOnCancelableQueue riduce al minimo l'uso del blocco spin di annullamento a livello di sistema usando i blocchi spin forniti per sincronizzare l'accesso quando possibile. KsMoveIrpsOnCancelableQueue non consente di modificare la routine di annullamento durante lo spostamento dei runtime di integrazione.
La funzione può essere chiamata a DISPATCH_LEVEL o inferiore.
Requisiti
Requisito | Valore |
---|---|
Piattaforma di destinazione | Universale |
Intestazione | ks.h (include Ks.h) |
Libreria | Ks.lib |