Freigeben über


NdisInterlockedInsertTailList-Makro (ndis.h)

Die NdisInterlockedInsertTailList-Funktion fügt einen Eintrag( in der Regel ein Paket) am Ende einer doppelt verknüpften Liste ein, sodass der Zugriff auf die Liste auf multiprozessorsichere Weise synchronisiert wird.

Syntax

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

Parameter

[in] _ListHead

Ein Zeiger auf den Kopf der doppelt verknüpften Liste, in die ein Eintrag eingefügt werden soll.

[in] _ListEntry

Ein Zeiger auf den Eintrag, der am Ende der Liste eingefügt werden soll.

[in] _SpinLock

Ein Zeiger auf eine vom Aufrufer bereitgestellte Drehsperre, die zum Synchronisieren des Zugriffs auf die Liste verwendet wird.

Rückgabewert

Keine

Bemerkungen

Vor dem Aufrufen von NdisInterlockedInsertTailList muss ein Treiber die Variable bei ListHead mit der Funktion NdisInitializeListHead und die Variable bei SpinLock mit der Funktion NdisAllocateSpinLock initialisieren. Der Treiber muss auch residenten Speicher für diese Variablen und für die interne Warteschlange bereitstellen.

Die vom Aufrufer bereitgestellte Drehsperre verhindert, dass andere Funktionen auf die interne Warteschlange des Treibers zugreifen, während NdisInterlockedInsertTailList den angegebenen Eintrag einfügt, auch wenn der Treiber auf einem Multiprozessorcomputer ausgeführt wird.

NdisInterlockedInsertTailList hebt die IRQL auf DISPATCH_LEVEL, wenn die angegebene Drehsperre abgerufen wird, und stellt die ursprüngliche IRQL wieder her, bevor die Steuerung zurückgegeben wird. Folglich kann jede Treiberfunktion, die NdisInterlockedInsertTailList aufruft , nicht ausgelagerter Code sein.

Um einen zurückgegebenen Wert wieder in die Adresse des eingefügten Eintrags zu konvertieren, kann ein Treiber das Makro CONTAINING_RECORD verwenden.

Wenn NdisInterlockedInsertTailList unter IRQL >= DISPATCH_LEVEL aufgerufen wird, müssen der Speicher für den ListHead-Parameter und die Listeneinträge resident sein.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Unterstützt für NDIS 6.0- und NDIS 5.1-Treiber (siehe NdisInterlockedInsertTailList (NDIS 5.1)) in Windows Vista. Unterstützt für NDIS 5.1-Treiber (siehe NdisInterlockedInsertTailList (NDIS 5.1)) in Windows XP.
Zielplattform Universell
Header ndis.h (include Ndis.h)
Bibliothek Ndis.lib
IRQL Beliebige Ebene

Weitere Informationen

CONTAINING_RECORD

NdisAllocateSpinLock

NdisInitializeListHead

NdisInterlockedInsertHeadList NdisInterlockedRemoveHeadList