Freigeben über


NdisInterlockedInsertTailList-Makro (ndis.h)

Die NdisInterlockedInsertTailList Funktion fügt einen Eintrag, in der Regel ein Paket, am Ende einer doubly 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 doubly 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

Nichts

Bemerkungen

Vor dem Aufrufen NdisInterlockedInsertTailList-muss ein Treiber die Variable bei ListHead- mit der funktion NdisInitializeListHead und der Variablen bei SpinLock mit der NdisAllocateSpinLock-Funktion initialisieren. Der Treiber muss auch einen 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- löst die IRQL auf DISPATCH_LEVEL aus, wenn sie die angegebene Drehsperre erhält, und stellt die ursprüngliche IRQL wieder her, bevor das Steuerelement zurückgegeben wird. Folglich kann jede Treiberfunktion, die NdisInterlockedInsertTailList- aufruft, nicht seitenfähigen Code sein.

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

Wenn NdisInterlockedInsertTailList- bei IRQL->= DISPATCH_LEVEL aufgerufen wird, muss der Speicher für den ListHead-parameter und die Listeneinträge resident sein.

Anforderungen

Anforderung Wert
mindestens unterstützte 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- Universal
Header- ndis.h (include Ndis.h)
Library Ndis.lib
IRQL- Beliebige Ebene

Siehe auch

CONTAINING_RECORD

NdisAllocateSpinLock

NdisInitializeListHead-

NdisInterlockedInsertHeadList NdisInterlockedRemoveHeadList