Freigeben über


ExInitializeNPagedLookasideList-Funktion (wdm.h)

Die ExInitializeNPagedLookasideList Routine initialisiert eine Lookaside-Liste für nicht seitenseitige Einträge der angegebenen Größe.

Syntax

void ExInitializeNPagedLookasideList(
  [out]          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

[out] Lookaside

Ein Zeiger auf die NPAGED_LOOKASIDE_LIST Struktur, die initialisiert werden soll. Der Aufrufer muss nicht seitenseitigen Systemraum für die Struktur verwenden. Auf 64-Bit-Plattformen muss diese Struktur 16-Byte ausgerichtet sein.

[in, optional] Allocate

Ein Zeiger auf eine vom Aufrufer bereitgestellte Funktion zum Zuordnen eines Eintrags, wenn die Lookaside-Liste leer ist, oder auf NULL-. Wenn nicht-NULL-, besteht der Zeiger auf eine Funktion mit dem Prototyp:

PVOID XxxAllocate(
  __in POOL_TYPE  PoolType,           // NonPagedPool 
  __in SIZE_T  NumberOfBytes,         // value of Size
  __in ULONG  Tag                     // value of Tag
);

Wenn der parameter "Zuweisen" NULList, werden nachfolgende Aufrufe von ExAllocateFromNPagedLookasideList automatisch Einträge zuordnen, wenn die Lookaside-Liste leer ist.

[in, optional] Free

Ein Zeiger auf eine vom Aufrufer bereitgestellte Funktion zum Freigeben eines Eintrags, wenn die Lookaside-Liste voll ist, oder auf NULL-. Wenn nicht-NULL-, besteht der Zeiger auf eine Funktion mit dem Prototyp:

VOID XxxFree(
  __in PVOID  Buffer
);

Wenn der parameter FreeNULL-ist, werden nachfolgende Aufrufe von ExFreeToNPagedLookasideList den angegebenen Eintrag bei voller Liste automatisch wieder in den nicht seitenfreien Pool freigeben, d. h. die vom System festgelegte maximale Anzahl von Einträgen.

[in] Flags

Ab Windows 8 gibt dieser Parameter einen optionalen Flagwert an, um das Standardverhalten der ExInitializeNPagedLookasideList Routine zu ändern. Kompatible Flagbits umfassen Folgendes.

Flagbit Bedeutung Wert
POOL_RAISE_IF_ALLOCATION_FAILURE Wenn die Zuordnung fehlschlägt, lösen Sie eine Ausnahme aus. 16
POOL_NX_ALLOCATION Weisen Sie nicht ausführbaren Speicher zu. 512

Vor Windows 8 wird dieser Parameter nicht verwendet und muss null sein.

[in] Size

Gibt die Größe in Byte für jeden nicht seitengebundenen Eintrag an, der anschließend zugewiesen werden soll. Dieser Parameter darf nicht kleiner als die erforderliche Mindestgröße LOOKASIDE_MINIMUM_BLOCK_SIZE sein, die in der Wdm.h-Headerdatei definiert ist.

[in] Tag

Gibt das Pooltag an, das beim Zuordnen von Lookaside-Listeneinträgen verwendet werden soll. Weitere Informationen zu Pooltags finden Sie im parameter Tag von ExAllocatePoolWithTag.

[in] Depth

Reserviert. Muss null sein.

Rückgabewert

Nichts

Bemerkungen

Nach dem Aufrufen ExInitializeNPagedLookasideList-können Speicherblöcke der vom Aufrufer angegebenen Size zugewiesen und der Lookaside-Liste mit Aufrufen von ExAllocateFromNPagedLookasideList bzw. ExFreeToNPagedLookasideListzugewiesen werden. Solche dynamisch zugewiesenen und freigegebenen Einträge können eine beliebige Datenstruktur oder ein Puffer mit fester Größe sein, den der Aufrufer während der Ausführung des Systems verwendet, insbesondere, wenn der Aufrufer nicht festlegen kann, wie viele solche Einträge zu einem bestimmten Zeitpunkt verwendet werden. Das Layout und der Inhalt jedes Eintrags mit fester Größe werden vom Aufrufer bestimmt.

ExInitializeNPagedLookasideList den Systemstatus initialisiert, um die Verwendung der angegebenen Lookaside-Liste wie folgt nachzuverfolgen:

  • Null initialisiert die Zähler, die für Einträge verwaltet werden sollen.

  • Speichert die Einstiegspunkte der vom Aufrufer bereitgestellten XxxZuordnen von und XxxFree Routinen, falls vorhanden, oder legt diese Einstiegspunkte auf ExAllocatePoolWithTag bzw. ExFreePool-fest.

  • Initialisiert eine Systemdrehsperre, um Die Zuordnungen von und freigibt die Lookaside-Liste bei Bedarf auf multiprozessorsichere Weise.

  • Speichert den vom Anrufer bereitgestellten Eintrag Größe und Liste Tag-.

  • Richtet die vom System festgelegten Grenzwerte (Minimum und Maximum) für die Anzahl der Einträge ein, die in der Lookaside-Liste aufbewahrt werden sollen, was anschließend angepasst werden kann, wenn die systemweite Nachfrage nach Einträgen höher oder niedriger ist als erwartet.

  • Richtet die vom System festgelegten Flags ein, die den Speichertyp steuern, aus dem einträge anschließend zugewiesen werden.

Das System verwaltet eine Reihe aller derzeit verwendeten Lookaside-Listen. Da die Nachfrage nach Nachschlagelisteneinträgen und im verfügbaren nicht seitenfreien Speicher während der Systemausführung variiert, passt das System seine Grenzwerte für die Anzahl der Einträge an, die in jeder nicht seitenseitigen Lookaside-Liste dynamisch gehalten werden sollen.

Treiber müssen immer explizit alle Lookaside-Listen freigeben, die sie vor dem Entladen erstellen. Andernfalls handelt es sich um einen schwerwiegenden Programmierfehler. Verwenden Sie ExDeleteNPagedLookasideList, um die Liste freizulassen.

ExInitializeNPagedLookasideList richtet den undurchsichtigen Listenkopf am vom Aufrufer bereitgestellten Speicherort ein, legt jedoch keinen Speicher für Listeneinträge fest. Anschließend werden die anfänglichen Einträge dynamisch zugewiesen, wenn Aufrufe von ExAllocateFromNPagedLookasideList auftreten, und diese anfänglichen Einträge werden in der Lookaside-Liste als gegenseitige Aufrufe an ExFreeToNPagedLookasideList stattfinden. Einträge werden in der angegebenen Lookaside-Liste erfasst, bis das vom System festgelegte Maximum erreicht ist, wobei alle zusätzlichen Einträge bei der Freigabe an den nichtpageten Pool zurückgegeben werden. Wenn die Liste leer wird, werden zuordnungsanforderungen vom XxxZuweisen Funktion erfüllt, die bei der Listeninitialisierung angegeben ist, oder durch ExAllocatePoolWithTag.

Es ist effizienter, NULL- Zeiger für die Zuweisen und Free Parameter von ExInitializeNPagedLookasideList zu übergeben, wenn der Benutzer einer Lookaside-Liste keine Einträge mit fester Größe zuordnet und loslässt. Jede Komponente, die eine Lookaside-Liste verwendet, kann diese Funktionen jedoch bereitstellen, um eine zusätzliche, durch Aufrufer festgelegte Verarbeitung zu erledigen, z. B. das Nachverfolgen einer eigenen dynamischen Speicherauslastung, indem der Zustand über die Anzahl der einträge beibehalten wird, die sie zuweist und freigibt.

Wenn der Aufrufer von ExInitializeNPagedLookasideList eine Xxx-Zuordnen-Funktion bereitstellt, muss diese Routine Einträge für die Lookaside-Liste mithilfe der angegebenen Eingabeparameter zuweisen, wenn sie ExAllocatePoolWithTag aufruft.

Beginnend mit Windows Vista, einer ähnlichen Routine, initialisiert ExInitializeLookasideListExeine Lookaside-Liste, die durch eine LOOKASIDE_LIST_EX Struktur beschrieben wird. Im Gegensatz zu den XxxZuweisen und XxxFree Routinen für eine Nachschlageliste, die eine NPAGED_LOOKASIDE_LIST Struktur verwendet, erhalten die Zuordnungs- und Deallocation-Routinen für eine Nachschlageliste, die die LOOKASIDE_LIST_EX Struktur verwendet, einen Kontextzeiger als Eingabeparameter. Diese Routinen können diesen Kontext verwenden, um private Daten für die Lookaside-Liste zu speichern. Wenn Ihr Treiber nur in Windows Vista und höheren Versionen von Windows ausgeführt werden soll, sollten Sie ExInitializeLookasideListEx anstelle von ExInitializeNPagedLookasideListverwenden. Weitere Informationen finden Sie unter Verwenden von Lookaside Lists.

Aufrufer von ExInitializeNPagedLookasideList- können bei IRQL <= DISPATCH_LEVEL ausgeführt werden, werden jedoch in der Regel bei IRQL = PASSIVE_LEVEL ausgeführt.

Anforderungen

Anforderung Wert
Zielplattform- Universal
Header- wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
DLL- NtosKrnl.exe
IRQL- IRQL-<= DISPATCH_LEVEL (siehe Abschnitt "Hinweise")

Siehe auch

ExAllocateFromNPagedLookasideList

ExAllocatePoolWithTag-

ExDeleteNPagedLookasideList

ExFreePool-

ExFreeToNPagedLookasideList

ExInitializeLookasideListEx

ExInitializePagedLookasideList

LOOKASIDE_LIST_EX

NPAGED_LOOKASIDE_LIST