Condividi tramite


Funzione NdisInitializeNPagedLookasideList (ndis.h)

La funzione NdisInitializeNPagedLookasideList inizializza un elenco lookaside. Dopo un'inizializzazione corretta, i blocchi a dimensione fissa non di pagina possono essere allocati e liberati all'elenco lookaside.

Sintassi

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
);

Parametri

[in] Lookaside

Puntatore a una struttura NPAGED_LOOKASIDE_LIST che contiene l'elenco lookaside fornito dal chiamante da inizializzare. La struttura deve essere allineata a 16 byte su piattaforme a 64 bit. Il driver deve fornire un'intestazione di elenco residente, ovvero nello spazio di sistema non a pagina.

[in, optional] Allocate

Punto di ingresso della funzione null o specifica il punto di ingresso di un chiamante fornito funzione Allocate che allocherà una voce delle dimensioni specificate nel membro Size ogni volta che viene chiamato. Se allocare è NULL, funzione NdisAllocateFromNPagedLookasideList successivamente alloca le voci per conto del chiamante. Se il chiamante fornisce una funzione Allocate, deve anche fornire una funzione Free.

[in, optional] Free

Punto di ingresso della funzione null o specifica il punto di ingresso di un chiamante fornito funzione free che libera una voce delle dimensioni specificate nel membro Size ogni volta che viene chiamato. Se free è NULL, funzione di NdisFreeToNPagedLookasideList libera successivamente le voci per conto del chiamante.

[in] Flags

Deve essere zero. Questo parametro è riservato.

[in] Size

Dimensioni, in byte, di ogni voce da allocare successivamente dall'elenco lookaside.

[in] Tag

Tag del pool fornito dal chiamante per le voci dell'elenco lookaside. Il Tag è una stringa di quattro caratteri delimitati da virgolette singole, ad esempio "derF". I caratteri vengono in genere specificati in ordine inverso in modo che siano più facili da leggere quando si esegue il dump del pool o l'utilizzo del pool di rilevamento nel debugger.

[in] Depth

Deve essere zero. Questo parametro è riservato.

Valore restituito

Nessuno

Osservazioni

NdisInitializeNPagedLookasideList inizializza l'intestazione elenco fornita dal chiamante, ma non alloca memoria per le voci di elenco. Le voci iniziali vengono allocate in base alle esigenze con le chiamate al funzione di NdisAllocateFromNPagedLookasideList oppure dalla funzione di callback Allocate fornita dal driver nel parametro allocate . L'elenco viene popolato quando il driver libera le voci nell'elenco con funzione di NdisFreeToNPagedLookasideList. Le voci vengono raccolte nell'elenco fino a quando non viene raggiunto un limite determinato dal sistema ma con dimensioni dinamiche. Quindi, tutte le voci in eccedenza nell'elenco lookaside vengono restituite al pool non di paging, da NdisFreeToNPagedLookasideList o con chiamate alla funzione di callback fornita dal driver Free nel parametro Free.

Tutte le voci nell'elenco lookaside hanno le stesse dimensioni, specificate nel parametro Size. Un elenco lookaside è particolarmente utile per i driver che devono allocare dinamicamente e liberare aree di contesto a dimensione fissa in cui mantenere lo stato di runtime sulle operazioni di I/O in sospeso. Ad esempio, è probabile che i driver NDIS orientati alla connessione trovino elenchi lookaside particolarmente utili perché tali driver in genere mantengono un set dinamico di aree di contesto per tenere traccia delle chiamate in uscita e in ingresso.

È più efficiente per un driver per consentire il NdisAllocateFromNPagedLookasideList e funzioni di NdisFreeToNPagedLookasideList per gestire l'allocazione e la deallocazione delle voci (vedere le funzioni ExAllocatePoolWithTag e exFreePool). Tuttavia, un driver che tiene traccia dello stato internamente sull'utilizzo della memoria potrebbe fornire Allocare e funzioni di gratuite per NdisInitializeNPagedLookasideList.

I chiamanti di NdisInitializeNPagedLookasideList devono essere in esecuzione in IRQL <= DISPATCH_LEVEL, ma in genere vengono eseguiti in PASSIVE_LEVEL.

Fabbisogno

Requisito Valore
client minimo supportato Supportato per i driver NDIS 6.0 e NDIS 5.1 (vedere NdisInitializeNPagedLookasideList (NDIS 5.1)) in Windows Vista. Supportato per i driver NDIS 5.1 (vedere NdisInitializeNPagedLookasideList (NDIS 5.1)) in Windows XP.
piattaforma di destinazione Desktop
intestazione ndis.h (include Ndis.h)
IRQL <= DISPATCH_LEVEL (vedere la sezione Osservazioni)
regole di conformità DDI Irql_Miscellaneous_Function(ndis)

Vedere anche

ExAllocatePoolWithTag

exFreePool

NPAGED_LOOKASIDE_LIST

NdisAllocateFromNPagedLookasideList NdisDeleteNPagedLookasideList NdisFreeToNPagedLookasideList