Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
234
Добавлен:
20.02.2016
Размер:
208.9 Кб
Скачать

[4.7.1]Выделениепамяти

PVOID ExAllocatePool(

IN POOL_TYPE PoolType,

IN ULONG NumberOfBytes);

PVOID ExAllocatePoolWithTag(

IN POOL_TYPE PoolType,

IN ULONG NumberOfBytes, IN ULONG Tag);

Table12.1: ExAllocatePool POOL_TYPEs

Тип памяти (PoolType)

Описание

Nonpaged Pool Allocations

NonPagedPool

Обычное выделение памяти из Nonpaged Pool.

NonPagedPoolCacheAligned

Allocation will be aligned to a cache line.

Must-Succeed Allocations

NonPagedPoolMustSucceed

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

NonPagedPoolCacheAlignedMustSucceed

Paged Pool Allocations

PagedPool

Обычное выделение памяти из Paged Pool.

PagedPoolCacheAligned

Allocation will be aligned to a cache line.

VOID ExFreePool(IN PVOID address);

PVOID MmAllocateNonCachedMemory(IN ULONG NumberOfBytes);

VOID MmFreeNonCachedMemory( IN PVOID BaseAddress,

IN ULONG NumberOfBytes);

PVOID MmAllocateContiguousMemory(IN ULONG NumberOfBytes,

IN PHYSICAL_ADDRESS HighestAcceptableAddress);

VOID MmFreeContiguousMemory(IN PVOID BaseAddress);

[4.7.2] Lookaside List

Во многих случаях, выделение и освобождение временного буфера памяти должно происходить очень часто. Для уменьшения накладных расходов служит Lookaside List – список заранее выделенных блоков памяти фиксированного размера.

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

VOID ExInitializeNPagedLookasideList(

IN PNPAGED_LOOKASIDE_LIST Lookaside,

IN PALLOCATE_FUNCTION Allocate OPTIONAL,

IN PFREE_FUNCTION Free OPTIONAL,

IN ULONG Flags,

IN ULONG Size,

IN ULONG Tag,

IN USHORT Depth );

VOID ExInitializePagedLookasideList(

IN PPAGED_LOOKASIDE_LIST Lookaside,

IN PALLOCATE_FUNCTION Allocate OPTIONAL,

IN PFREE_FUNCTION Free OPTIONAL,

IN ULONG Flags,

IN ULONG Size,

IN ULONG Tag,

IN USHORT Depth );

PVOID ExAllocateFromNPagedLookasideList(IN PNPAGED_LOOKASIDE_LIST Lookaside);

PVOID ExAllocateFromPagedLookasideList(IN PPAGED_LOOKASIDE_LIST Lookaside);

VOID ExFreeToNPagedLookasideList(

IN PNPAGED_LOOKASIDE_LIST Lookaside,

IN PVOID Entry);

VOID ExFreeToPagedLookasideList(

IN PPAGED_LOOKASIDE_LIST Lookaside,

IN PVOID Entry);

VOID ExDeleteNPagedLookasideList(IN PNPAGED_LOOKASIDE_LIST Lookaside);

VOID ExDeletePagedLookasideList(IN PPAGED_LOOKASIDE_LIST Lookaside);

[4.7.3] Отображение памяти устройств и пространства в/в

См. раздел ”Типы адресов в NT”.

BOOLEAN HalTranslateBusAddress( IN INTERFACE_TYPE InterfaceType,

IN ULONG BusNumber,

IN PHYSICAL_ADDRESS BusAddress,

IN OUT PULONG AddressSpace,

OUT PPHYSICAL_ADDRESS TranslatedAddress);

PVOID MmMapIoSpace( IN PHYSICAL_ADDRESS PhysicalAddress,

IN ULONG NumberOfBytes,

IN BOOLEAN CacheEnable);

VOID MmUnmapIoSpace( IN PVOID BaseAddress,

IN ULONG NumberOfBytes);

Соседние файлы в папке Лабы по драйверам