Вызовы для выделения и освобождения областей виртуальной памяти
Для манипуляций с областями памяти (выделение и освобождение) в режиме ядра используются специальные системные вызовы, отличающиеся от API вызовов режима ядра: ExAllocatePool, ExAllocatePoolWithTag, ExFreePool. В режиме ядра возможно выделение и освобождение области физически непрерывной памяти, что выполняется при помощи вызовов MmAllocateContiguousMemory
и, соответственно, MmFreeContiguousMemory. Эти вызовы рассмотрены ниже.
Таблица 7.2. Прототип вызова ExAllocatePool
PVOID ExAllocatePool | IRQL < DISPATCH_LEVEL | |
Параметры | Выполняет выделение области памяти | |
IN POOL_TYPE PoolType | Тип виртуальной памяти, в которой следует выделять область. Наиболее употребительны значения: • PagedPool — страничная • NonPagedPool — нестраничная, тогда данную функцию можно вызывать при любом уровне IRQL | |
IN ULONG NumberOfBytes | Размер запрашиваемой области | |
Возвращаемое значение | Указатель на выделенную область либо NULL (в случае, если память выделить невозможно). Выделенная область всегда выравнивается на 8 байт. В случае, если запрашиваемый размер превышает PAGE_SIZE, то выделяемая область выравнивается на размер страницы. |
Таблица 7.3. Прототип вызова ExAllocatePoolWithTag
PVOID ExAllocatePoolWithTag | IRQL < DISPATCH_LEVEL |
Параметры | Выполняет выделение области памяти |
IN POOL_TYPE PoolType | См. описание ExAllocatePool
выше. |
IN ULONG NumberOfBytes | Размер запрашиваемой области |
IN ULONG Tag | Метка (тег) для данной области, можно задавать как 4 символа, например, 'ABCD'. Удобно для отладки. |
Возвращаемое значение | См. описание ExAllocatePool
выше. |
Таблица 7.4. Прототип вызова ExFreePool
VOID ExFreePool | IRQL < DISPATCH_LEVEL |
Параметры | Выполняет освобождение области памяти |
IN PVOID pBuffer | Указатель на освобождаемую область памяти, выделенную вызовами ExAllocatePool или ExAllocatePoolWithTag. Если освобождается нестраничная память, вызов может быть сделан из кода на уровне DISPATCH_LEVEL IRQL |
Возвращаемое значение | void |
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий