Condividi tramite


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

Vedi anche

KStrIrpListCallback