Condividi tramite


Macro NdisInterlockedRemoveHeadList (ndis.h)

La funzione NdisInterlockedRemoveHeadList rimuove una voce, in genere un pacchetto, dall'inizio di un elenco collegato doubly in modo che l'accesso all'elenco venga sincronizzato in modo sicuro multiprocessore.

Sintassi

PLIST_ENTRY NdisInterlockedRemoveHeadList(
  [in]  _ListHead,
  [in]  _SpinLock
);

Parametri

[in] _ListHead

Puntatore all'inizio dell'elenco collegato doubly da cui rimuovere una voce.

[in] _SpinLock

Puntatore a un blocco di selezione fornito dal chiamante, utilizzato per sincronizzare l'accesso all'elenco.

Valore restituito

NdisInterlockedRemoveHeadList restituisce un puntatore alla struttura LIST_ENTRY rimossa dall'elenco. Se l'elenco è vuoto, la routine restituisce NULL.

Osservazioni

Prima di chiamare qualsiasi NdisInterlocked.. Elencare funzione, un driver deve inizializzare la variabile in ListHead con la funzione NdisInitializeListHead e la variabile in SpinLock con la funzione NdisAllocateSpinLock. Il driver deve anche fornire spazio di archiviazione residente per queste variabili e per la relativa coda interna.

Prima di chiamare NdisInterlockedRemoveHeadList, le voci vengono accodate con una o più chiamate al NdisInterlockedInsert.. Elencare funzioni.

Il blocco spin fornito dal chiamante impedisce a qualsiasi altra funzione di accedere alla coda interna del driver mentre NdisInterlockedRemoveHeadList rimuove una voce, anche quando il driver è in esecuzione in un computer multiprocessore.

NdisInterlockedRemoveHeadList genera irQL per DISPATCH_LEVEL quando acquisisce il blocco di selezione specificato e ripristina l'IRQL originale prima di restituire il controllo. Di conseguenza, qualsiasi funzione driver che chiama NdisInterlockedRemoveHeadList non può essere codice impaginabile.

Per convertire nuovamente un valore restituito nell'indirizzo della voce inserita, un driver può utilizzare la macro CONTAINING_RECORD.

Se NdisInterlockedRemoveHeadList viene chiamato in IRQL >= DISPATCH_LEVEL, l'archiviazione per il parametro ListHead deve essere residente.

Fabbisogno

Requisito Valore
client minimo supportato Supportato per i driver NDIS 6.0 e NDIS 5.1 (vedere NdisInterlockedRemoveHeadList (NDIS 5.1) in Windows Vista. Supportato per i driver NDIS 5.1 (vedere NdisInterlockedRemoveHeadList (NDIS 5.1)) in Windows XP.
piattaforma di destinazione Universale
intestazione ndis.h (include Ndis.h)
libreria Ndis.lib
IRQL Qualsiasi livello

Vedere anche

CONTAINING_RECORD

NdisAllocateSpinLock

NdisInitializeListHead

NdisInterlockedInsertHeadList NdisInterlockedInsertTailList