NdisInitializeNPagedLookasideList-Funktion (ndis.h)

Die NdisInitializeNPagedLookasideList-Funktion initialisiert eine Suchliste. Nach einer erfolgreichen Initialisierung können nicht ausseitige Blöcke fester Größe aus der Lookaside-Liste zugeordnet und freigegeben werden.

Syntax

void NdisInitializeNPagedLookasideList(
  [in]           PNPAGED_LOOKASIDE_LIST Lookaside,
  [in, optional] PALLOCATE_FUNCTION     Allocate,
  [in, optional] PFREE_FUNCTION         Free,
  [in]           ULONG                  Flags,
  [in]           SIZE_T                 Size,
  [in]           ULONG                  Tag,
  [in]           USHORT                 Depth
);

Parameter

[in] Lookaside

Ein Zeiger auf eine NPAGED_LOOKASIDE_LIST-Struktur , die den vom Aufrufer bereitgestellten Lookaside-Listenkopf enthält, der initialisiert werden soll. Die Struktur muss 16-Byte auf 64-Bit-Plattformen ausgerichtet sein. Der Treiber muss einen Listenkopf bereitstellen, der resident ist, d. h. im nicht auslagerten Systembereich.

[in, optional] Allocate

Ein Funktionseinstiegspunkt, der entweder NULL ist oder den Einstiegspunkt einer vom Aufrufer bereitgestellten Allocate-Funktion angibt, die bei jedem Aufruf einen Eintrag der Größe zuordnet, die im Size-Element angegeben ist. Wenn Allocateden Wert NULL aufweist, Die NdisAllocateFromNPagedLookasideList-Funktion ordnet anschließend Einträge im Namen des Aufrufers zu. Wenn der Aufrufer eine Allocate-Funktion bereitstellt, muss er auch eine Free-Funktion bereitstellen.

[in, optional] Free

Ein Funktionseinstiegspunkt, der entweder NULL ist oder den Einstiegspunkt einer vom Aufrufer bereitgestellten Free-Funktion angibt, die bei jedem Aufruf einen Eintrag der Größe freigibt, die im Size-Member angegeben ist. Wenn FreeNULL ist,Die NdisFreeToNPagedLookasideList-Funktion gibt anschließend Einträge im Namen des Aufrufers frei.

[in] Flags

Muss Null sein. Dieser Parameter ist reserviert.

[in] Size

Die Größe jedes Eintrags in Byte, der anschließend aus der Suchliste zugeordnet werden soll.

[in] Tag

Ein vom Aufrufer bereitgestelltes Pooltag für Suchlisteneinträge. Das Tag ist eine Zeichenfolge aus vier Zeichen, die durch einfache Anführungszeichen (z. B. "derF") getrennt ist. Die Zeichen werden in der Regel in umgekehrter Reihenfolge angegeben, sodass sie leichter zu lesen sind, wenn die Pool- oder Nachverfolgungspoolnutzung im Debugger erfolgt.

[in] Depth

Muss Null sein. Dieser Parameter ist ebenfalls reserviert.

Rückgabewert

Keine

Bemerkungen

NdisInitializeNPagedLookasideList initialisiert den vom Aufrufer bereitgestellten Listenkopf, weist jedoch keinen Arbeitsspeicher für Listeneinträge zu. Die anfänglichen Einträge werden nach Bedarf entweder mit Aufrufen der NdisAllocateFromNPagedLookasideList-Funktion oder von der vom Treiber bereitgestellten Allocate-Rückruffunktion am Allocate-Parameter . Die Liste wird aufgefüllt, während der Treiber Einträge wieder in die Liste mit der NdisFreeToNPagedLookasideList-Funktion . Einträge werden in der Liste gesammelt, bis ein vom System festgelegter, aber dynamisch dimensionierter Grenzwert erreicht wird. Anschließend werden alle überschüssigen Einträge in der Lookaside-Liste an einen nicht ausgestellten Pool zurückgegeben, entweder durch NdisFreeToNPagedLookasideList oder mit Aufrufen der vom Treiber bereitgestellten Free-Rückruffunktion am Free-Parameter .

Alle Einträge in der Lookaside-Liste haben dieselbe Größe, die im Parameter Size angegeben ist. Eine Lookaside-Liste ist besonders nützlich für Treiber, die Kontextbereiche mit fester Größe dynamisch zuordnen und freigeben müssen, in denen der Laufzeitzustand ihrer ausstehenden E/A-Vorgänge beibehalten werden kann. Für instance sind verbindungsorientierte NDIS-Treiber wahrscheinlich besonders nützlich, da solche Treiber in der Regel einen dynamischen Satz von Kontextbereichen verwalten, um ausgehende und eingehende Anrufe nachzuverfolgen.

Es ist effizienter für einen Treiber, die NdisAllocateFromNPagedLookasideList und NdisFreeToNPagedLookasideList-Funktionen zum Verwalten der Zuordnung und Aufhebung der Zuordnung von Einträgen (siehe die Funktionen ExAllocatePoolWithTag und ExFreePool ). Ein Treiber, der den Zustand seiner Speicherauslastung intern nachverfolgt, kann jedoch die Funktionen Allocate und Free für NdisInitializeNPagedLookasideList bereitstellen.

Aufrufer von NdisInitializeNPagedLookasideList müssen unter IRQL <= DISPATCH_LEVEL ausgeführt werden, werden jedoch in der Regel PASSIVE_LEVEL ausgeführt.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Unterstützt für NDIS 6.0- und NDIS 5.1-Treiber (siehe NdisInitializeNPagedLookasideList (NDIS 5.1)) in Windows Vista. Unterstützt für NDIS 5.1-Treiber (siehe NdisInitializeNPagedLookasideList (NDIS 5.1)) in Windows XP.
Zielplattform Desktop
Kopfzeile ndis.h (include Ndis.h)
IRQL <= DISPATCH_LEVEL (siehe Abschnitt "Hinweise")
DDI-Complianceregeln Irql_Miscellaneous_Function(ndis)

Weitere Informationen

ExAllocatePoolWithTag

ExFreePool

NPAGED_LOOKASIDE_LIST

NdisAllocateFromNPagedLookasideList NdisDeleteNPagedLookasideList NdisFreeToNPagedLookasideList