Программирование драйверов Windows



Работа с ассоциативными списками - часть 2


Для Windows 2000 в качестве такого параметра был анонсирован параметр Depth. (K сожалению, в документации способ определения значения этого параметра умалчивается, начиная с версии DDK Win98.) Следует отметить, что до достижения данного максимума освобождаемые драйвером блоки не возвращаются в системную память, оставаясь в составе списка. Если в списке имеются ранее освобожденные блоки, и поступил запрос на новый блок, то предоставляется указатель на один из них. Ситуация кардинально меняется если максимум достигнут. При запросе нового блока (и при этом ранее освобожденных блоков в списке нет) память под него берется непосредственно из системной памяти и при освобождении сразу же возвращается в соответствующий пул системной памяти &#8212 иными словами, исчезают преимущества использования ассоциативного списка.

Таблица 7.10. Прототип вызова ExInitializeNPagedLookasideList

VOID ExInitializeNPagedLookasideList IRQL &#60= DISPATCH_LEVEL
Параметры Создание ассоциативного списка блоков нестраничной памяти
IN PNPAGED_LOOKASIDE_LIST

pLookasideListHeader

Указатель на предварительно выделенную драйвером область размером sizeof(NPAGED_LOOKASIDE_LIST)
IN OPTIONAL PALLOCATE_FUNCTION

pAllocFunction

NULL или указатель на предоставляемую драйвером функцию, которая будет заниматься выделением блоков из массива системной нестраничной памяти (если NULL &#8212 будет использован системный вызов ExAllocatePoolWithTag)
IN OPTIONAL PFREE_FUNCTION

pFreeFunction

NULL или указатель на предоставляемую драйвером функцию, которая будет заниматься освобождением блоков (если NULL &#8212 будет использован вызов ExFreePool)
IN ULONG Flags Зарезервировано. Указывать 0
IN ULONG ByteSize Размер отдельных блоков, поддерживаемых данным списком
IN ULONG Tag Метка (тег) для создаваемых блоков, можно задавать как 4 символа, например, 'ABCD'
IN USHORT Depth Зарезервировано. Указывать 0
Возвращаемое значение void

Перед вызовом процедуры инициализации, для хранения заголовка ассоциативного списка драйвер должен получить область в нестраничной памяти




Содержание  Назад  Вперед