Freigeben über


NdisInterlockedInsertHeadList-Makro (ndis.h)

Die NdisInterlockedInsertHeadList Funktion fügt einen Eintrag, in der Regel ein Paket, an der Kopfzeile einer doubly verknüpften Liste ein, sodass der Zugriff auf die Liste auf multiprozessorsichere Weise synchronisiert wird.

Syntax

void NdisInterlockedInsertHeadList(
  [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 an der Kopfzeile 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 NdisInterlockedInsertHeadList-muss ein Treiber die Variable bei ListHead- mit der funktion NdisInitializeListHead und der Variablen bei SpinLock mit der funktion NdisAllocateSpinLock 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 NdisInterlockedInsertHeadList den angegebenen Eintrag einfügt, auch wenn der Treiber auf einem Multiprozessorcomputer ausgeführt wird.

NdisInterlockedInsertHeadList- löst 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 NdisInterlockedInsertHeadList aufruft, nicht seitenfähigen Code sein.

Die meisten NDIS-Treiber verarbeiten Pakete in FIFO-Reihenfolge, sodass jeder Treiber, der eine verriegelte Warteschlange verwendet, dazu tendiert, thel zu caldieren. NdisInterlockedInsertTailList funktion viel häufiger als NdisInterlockedInsertHeadList. Ein solcher Treiber ruft in der Regel NdisInterlockedInsertHeadList nur auf, um ein Paket für einen Wiederholungsvorgang erneut aufzustellen.

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

Wenn NdisInterlockedInsertHeadList- bei IRQL->= DISPATCH_LEVEL aufgerufen wird, muss der Speicher für den parameter ListHead 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 NdisInterlockedInsertHeadList (NDIS 5.1)) in Windows Vista. Unterstützt für NDIS 5.1-Treiber (siehe NdisInterlockedInsertHeadList (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-

NdisInterlockedInsertTailList NdisInterlockedRemoveHeadList