Freigeben über


NdisInterlockedRemoveHeadList-Makro (ndis.h)

Die NdisInterlockedRemoveHeadList-Funktion entfernt einen Eintrag, in der Regel ein Paket, aus dem Kopf einer doppelt verknüpften Liste, sodass der Zugriff auf die Liste auf multiprozessorsichere Weise synchronisiert wird.

Syntax

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

Parameter

[in] _ListHead

Ein Zeiger auf den Kopf der doppelt verknüpften Liste, aus der ein Eintrag entfernt werden soll.

[in] _SpinLock

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

Rückgabewert

NdisInterlockedRemoveHeadList gibt einen Zeiger auf die LIST_ENTRY Struktur zurück, die aus der Liste entfernt wurde. Wenn die Liste leer war, gibt die Routine NULL zurück.

Hinweise

Vor dem Aufrufen von NdisInterlocked.. List-Funktion : Ein Treiber muss die Variable bei ListHead mit der Funktion NdisInitializeListHead und die Variable bei SpinLock mit der NdisAllocateSpinLock-Funktion initialisieren. Der Treiber muss auch einen residenten Speicher für diese Variablen und für seine interne Warteschlange bereitstellen.

Vor dem Aufrufen von NdisInterlockedRemoveHeadList werden Einträge mit einem oder mehreren Aufrufen von NdisInterlockedInsert. in die Warteschlange gestellt. Listenfunktionen .

Die vom Aufrufer bereitgestellte Spinsperre verhindert, dass andere Funktionen auf die interne Warteschlange des Treibers zugreifen, während NdisInterlockedRemoveHeadList einen Eintrag entfernt, auch wenn der Treiber auf einem Multiprozessorcomputer ausgeführt wird.

NdisInterlockedRemoveHeadList hebt die IRQL auf DISPATCH_LEVEL, wenn die angegebene Spinsperre abgerufen wird, und stellt den ursprünglichen IRQL wieder her, bevor die Steuerung zurückgegeben wird. Folglich kann jede Treiberfunktion, die NdisInterlockedRemoveHeadList aufruft , nicht auslagerungsfähiger Code sein.

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

Wenn NdisInterlockedRemoveHeadList unter IRQL >= DISPATCH_LEVEL aufgerufen wird, muss der Speicher für den ListHead-Parameter resident sein.

Anforderungen

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

Weitere Informationen

CONTAINING_RECORD

NdisAllocateSpinLock

NdisInitializeListHead

NdisInterlockedInsertHeadList NdisInterlockedInsertTailList