Функция NdisInitializeNPagedLookasideList (ndis.h)

Функция NdisInitializeNPagedLookasideList инициализирует список lookaside. После успешной инициализации неупакованные блоки фиксированного размера можно выделить из списка lookaside и освободить их.

Синтаксис

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

Параметры

[in] Lookaside

Указатель на структуру NPAGED_LOOKASIDE_LIST , которая содержит инициализизуемую головку списка lookaside, предоставляемую вызывающим абонентом. Структура должна быть выровнена по 16 байтам для 64-разрядных платформ. Драйвер должен предоставить головку списка, которая является резидентной, то есть в системном пространстве без паг.

[in, optional] Allocate

Точка входа функции, которая имеет значение NULL или задает точку входа в предоставляемую вызывающим объектом функцию Allocate , которая выделяет запись размера, указанного в элементе Size при каждом вызове. Если параметр Allocate имеет значение NULL,Функция NdisAllocateFromNPagedLookasideList впоследствии выделяет записи от имени вызывающего объекта. Если вызывающий объект предоставляет функцию Allocate , он также должен предоставить функцию Free .

[in, optional] Free

Точка входа функции, которая имеет значение NULL или указывает точку входа предоставляемой вызывающей функцией Free , которая освобождает запись размера, указанного в элементе Size при каждом вызове. Если свободное значение равно NULL,Функция NdisFreeToNPagedLookasideList впоследствии освобождает записи от имени вызывающего объекта.

[in] Flags

Должен равняться нулю. Этот параметр зарезервирован.

[in] Size

Размер (в байтах) каждой записи для последующего выделения из списка lookaside.

[in] Tag

Предоставленный вызывающим абонентом тег пула для записей списка lookaside. Тег — это строка из четырех символов, разделенная одними кавычками (например, derF). Символы обычно указываются в обратном порядке, чтобы их было проще считывать при создании дампа пула или отслеживании использования пула в отладчике.

[in] Depth

Должен равняться нулю. Этот параметр также зарезервирован.

Возвращаемое значение

None

Remarks

NdisInitializeNPagedLookasideList инициализирует головку списка, предоставленную вызывающей стороной, но не выделяет память для записей списка. Начальные записи выделяются по мере необходимости с помощью вызовов Функция NdisAllocateFromNPagedLookasideList или функция обратного вызова Allocate , предоставляемая драйвером, в параметре Allocate . Список заполняется, так как драйвер освобождает записи обратно в список с помощью Функция NdisFreeToNPagedLookasideList . Записи собираются в списке до достижения определяемого системой ограничения, но динамического размера. Затем все излишки записей в списке lookaside возвращаются в невыгребованный пул либо с помощью NdisFreeToNPagedLookasideList , либо с вызовами функции обратного вызова Free, предоставленной драйвером, в параметре Free .

Все записи в списке lookaside имеют одинаковый размер, который указан в параметре Size . Список аспектов особенно полезен для драйверов, которые должны динамически выделять и освобождать области контекста фиксированного размера, в которых можно поддерживать состояние времени выполнения о невыполненных операциях ввода-вывода. Например, ориентированные на подключение драйверы NDIS, скорее всего, будут находить списки lookaside особенно полезными, так как такие драйверы обычно поддерживают динамический набор областей контекста для отслеживания исходящих и входящих вызовов.

Для драйвера эффективнее разрешить NdisAllocateFromNPagedLookasideList иФункции NdisFreeToNPagedLookasideList для управления выделением и освобождением записей (см. функции ExAllocatePoolWithTag и ExFreePool). Однако драйвер, который внутренне отслеживает состояние использования памяти, может предоставлять функции Allocate и Freeдля NdisInitializeNPagedLookasideList.

Вызывающие NdisInitializeNPagedLookasideList должны выполняться в IRQL <= DISPATCH_LEVEL, но обычно выполняются в PASSIVE_LEVEL.

Требования

Требование Значение
Минимальная версия клиента Поддерживается для драйверов NDIS 6.0 и NDIS 5.1 (см. раздел NdisInitializeNPagedLookasideList (NDIS 5.1)) в Windows Vista. Поддерживается для драйверов NDIS 5.1 (см. раздел NdisInitializeNPagedLookasideList (NDIS 5.1)) в Windows XP.
Целевая платформа Персональный компьютер
Верхняя часть ndis.h (включая Ndis.h)
IRQL <= DISPATCH_LEVEL (см. раздел "Примечания")
Правила соответствия DDI Irql_Miscellaneous_Function(ndis)

См. также раздел

ExAllocatePoolWithTag

ExFreePool

NPAGED_LOOKASIDE_LIST

NdisAllocateFromNPagedLookasideList NdisDeleteNPagedLookasideList NdisFreeToNPagedLookasideList