Вызовы для выделения и освобождения областей виртуальной памяти - часть 2
/p>
Таблица 7.5. Прототип вызова MmAllocateContiguousMemory
PVOID MmAllocateContiguousMemory | IRQL == PASSIVE_LEVEL |
Параметры | Выполняет выделение физически непрерывной области памяти |
IN ULONG NumberOfBytes | Размер запрашиваемой области |
IN PHYSICAL_ADDRESS maxAcceptableAddress | Верхний предел адресов для запрашиваемой области. Поле HighPart=0, поле LowPart принимает значения, например: • 0x000FFFFF (до 1 МБ) • 0x00FFFFFF (до 16 МБ) • 0xFFFFFFFF(до 4ГБ) |
Возвращаемое значение | Виртуальный адрес или NULL (при неудаче). (Для повышения вероятности успешного завершения рекомендуется выполнять вызов в DriverEntry, поскольку память при работе системы быстро становится сильно дефрагментированной) |
Таблица 7.6. Прототип вызова MmFreeContiguousMemory
VOID MmFreeContiguousMemory | IRQL == PASSIVE_LEVEL |
Параметры | Выполняет освобождение области памяти |
IN PVOID pBuffer | Указатель на область памяти, выделенную ранее с использованием системного вызова MmAllocateContiguousMemory |
Возвращаемое значение | void |
Таблица 7.7. Прототип вызова MmIsAddressValid
BOOLEAN MmlsAddressValid | IRQL <= DISPATCH_LEVEL |
Параметры | Выполняет проверку виртуального адреса |
IN PVOID VirtualAddress | Виртуальный адрес, который следует проверить |
Возвращаемое значение | TRUE — если присутствует в оперативной памяти FALSE — если вызовет прерывание PAGE FAULT Замечание. Если адрес не находится в нестраничной памяти (или не зафиксирован в оперативной памяти), возврат TRUE не гарантирует отсутствие проблем при работе на повышенных уровнях IRQL (поскольку к моменту использования данного виртуального адреса ситуация может измениться). |
Таблица 7.8. Прототип вызова MmGetPhysicalAddress
PHYSICAL_ADDRESS MmGetPhysicalAddress | IRQL — любой |
Параметры | Определяет физический адрес, соответствующий данному виртуальному |
IN PVOID VirtualAddress | Анализируемый виртуальный адрес |
Возвращаемое значение |
Физический адрес. Перед данным вызовом следует воспользоваться MmlsAddressValid |