Condividi tramite


Macro NdisInterlockedInsertHeadList (ndis.h)

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

Sintassi

void NdisInterlockedInsertHeadList(
  [in]  _ListHead,
  [in]  _ListEntry,
  [in]  _SpinLock
);

Parametri

[in] _ListHead

Puntatore alla testa dell'elenco collegato doubly in cui deve essere inserita una voce.

[in] _ListEntry

Puntatore alla voce da inserire nella parte principale dell'elenco.

[in] _SpinLock

Puntatore a un blocco spin fornito dal chiamante, usato per sincronizzare l'accesso all'elenco.

Valore restituito

nessuno

Osservazioni

Prima di chiamare NdisInterlockedInsertHeadList, un driver deve inizializzare la variabile in ListHead con la funzione NdisInitializeListHead e la variabile in SpinLock con la funzione NdisAllocateSpinLock . Il driver deve inoltre fornire l'archiviazione residente per queste variabili e per la relativa coda interna.

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

NdisInterlockedInsertHeadList genera IRQL in DISPATCH_LEVEL quando acquisisce il blocco di spin specificato e ripristina il controllo IRQL originale prima di restituire il controllo. Di conseguenza, qualsiasi funzione driver che chiama NdisInterlockedInsertHeadList non può essere codice impaginabile.

La maggior parte dei driver NDIS elabora i pacchetti nell'ordine FIFO, quindi qualsiasi driver che usa una coda interlocked tende a assegnare il cal thel Funzione NdisInterlockedInsertTailList molto più frequente di NdisInterlockedInsertHeadList. Questo driver chiama in genere NdisInterlockedInsertHeadList solo per riquezionare un pacchetto per un'operazione di ripetizione dei tentativi.

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

Se NdisInterlockedInsertHeadList viene chiamato in IRQL >= DISPATCH_LEVEL, l'archiviazione per il parametro ListHead e le voci di elenco devono essere residenti.

Requisiti

Requisito Valore
Client minimo supportato Supportato per i driver NDIS 6.0 e NDIS 5.1 (vedere NdisInterlockedInsertHeadList (NDIS 5.1) in Windows Vista. Supportato per i driver NDIS 5.1 (vedere NdisInterlockedInsertHeadList (NDIS 5.1) in Windows XP.
Piattaforma di destinazione Universale
Intestazione ndis.h (includere Ndis.h)
Libreria Ndis.lib
IRQL Qualsiasi livello

Vedi anche

CONTAINING_RECORD

NdisAllocateSpinLock

NdisInitializeListHead

NdisInterlockedInsertTailList NdisInterlockedRemoveHeadList