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 |