Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

MapUserPhysicalPages проецирование памяти

Delphi , ОС и Железо , Windows

Функция MapUserPhysicalPages проецирует выделенную ранее область физической памяти в указанное адрусное пространство AWE-региона виртуальной памяти. Для того, чтобы произвести "групповое" проецирование или разпроецирование для нескольких регионов, вы должны воспользоваться функцией MapUserPhysicalPagesScatter.

Code:

{ Вариант 1 }
function MapUserPhysicalPages(
lpAddress: Pointer      // начальный адрес области памяти
NumberOfPages: UINT;    // размер физической памяти в страницах
var UserPfnArray: UINT  // первый элемент массива фреймов страниц
): Boolean; overload;
 
{ Вариант 2 }
function MapUserPhysicalPages(
lpAddress: Pointer      // начальный адрес области памяти
NumberOfPages: UINT;    // размер физической памяти в страницах
UserPfnArray: Pointer   // указатель на массив фреймов страниц
): Boolean; overload;

Параметры

lpAddress

Указатель на начальный адрес области памяти, на который будет спроецирована физическая память. Это значение должно находиться внутри диапазона виртуального адресного пространства приложения, выделенного при помощи функции VirtualAlloc с атрубутом, указывающим принадлежность выделяемого фрагмента памяти к AWE-региону.

NumberOfPages

Задает размер в страницах физической памяти (и виртуального адресного пространства). Виртуальное адресное пространство непрерывно и начинается с адреса, указанного в параметре lpAddress. Кадры физической памяти задаются параметром UserPfnArray. Общее число страниц не может превышть то количество страниц, которое было выделено при вызове AllocateUserPhysicalPages.

UserPfnArray

Задает начальный элемент массива фреймов страниц (вариант 1). Эти фрейймы должны быть спроецированы в область памяти, на которую указывает параметр lpAddress. Указанный массив должен содержать по меньшей мере NumberOfPages элементов типа UINT.

Важно! Не пытайтесь модифицировать содержимое этого буфера. Он содержит данные, принадлежащие операционной системе, повреждение которых можт повлечь за собой катастрофические последствия. В этом буфере не содержиться никакой информации, необходимой вашему приложению.

Указание значение nil этому параметру (вариант 2), позволяет провести распроецирование указанного диапазона адресов. При этом указанные страницы не освобождаются в физической памяти, для этого нужно выполнять специальный вызов FreeUserPhysicalPages.

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

В случае удачного завершения фкнция возвращает True.

В случае ошибки (когда не было выпоолнено ни частичного, ни полного проецирования) функция вернет False. Для получения расширенной информации об ошибке следует сделать вызов GetLastError.

Описание

Любое количество страниц в физической памяти никак не затрагивает память, выделенную при помощи функции VirtualAlloc. Новая проекция физической памяти на виртуальное адресное пространство процесса автоматически перезаписывает все старые проекции.

Вы не можете спроецровать на виртуальное адресное пространство процесса страницы, которые не были выделены при помощи метода AllocateUserPhysicalPages.

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

Страницы физической памяти могут располагаться где угодно. Вы не можете делать каких либо предположений относительно расположения страниц в оперативной памяти. Если со страницы физической памяти было снято проецирование на виртуальное адресно пространство процесса, то это не приводит к освобождению страницы физической памяти. Чтобы освободить страницу в физической памяти, необходимо выполнить вызов FreeUserPhysicalPages.

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

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

Требования 

Windows NT/2000: Требуется Windows 2000 или более поздняя версия

Windows 95/98: Не поддерживается

Бибиотека: Kernel32.dll

Подключаемый модуль: Windows

© Mystic, 2002

Статья MapUserPhysicalPages проецирование памяти раздела ОС и Железо Windows может быть полезна для разработчиков на Delphi и FreePascal.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Windows ::


реклама

::


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Rambler's Top100
26.09.2017 15:41:08/0.0098669528961182/0