Вопрос по виртуальной памяти Windows

kataich

Скажите, пожалуйста, можно ли средствами API передать зарезервированный кусок памяти в адресном пространстве конкретной физической.
Я имею в виду следующее. Пусть мы вызвали, например, VirtualAlloc с флагами MEM_RESERVE | MEM_COMMIT. Тем самым привязали какие-то виртуальные страницы с каким-то физическим. Потом у меня есть еще зарезервированные страницы. Хочу передать их физической памяти, но не абы какой, а именно той что уже выделилась первым VirtualAlloc'ом.

Sebasten

Вроде такое возможно, мсдн говорит, что
"VirtualAlloc can perform the following operations:
Commit a region of pages reserved by a previous call to the VirtualAlloc function."
Наверное, что-то типа этого

LPVOID reservedmemory = VirtualAlloc(NULL, 0x100000, MEM_RESERVE, PAGE_READWRITE);
VirtualAlloc(reservedmemory,0x80000, MEM_COMMIT, PAGE_READWRITE)

SPARTAK3959

Привязать кусок памяти к конкретному физическому адресу нельзя. Но твою проблему решить можно через файлы отображаемые в память. Создаешь несколько видов и получаешь несколько кусков памяти в адресном пространстве отображаемые на одну физическую.

kataich

Мне бы хотелось провернуть такое с dll процесса, но для этого же понядобятся хэндлы модулей, полученные загрузчиком. Можно ли их получить в user mode ?

SPARTAK3959

Черт его знает, я так сильно никогда не извращался. Да и если dll'ка загружена с флэшки, то она может не являться файлом отображаемым в память.

kataich

Да они, по-моему, все не являются проецируемыми файлами, поэтому даже не знаю как этим способом все сделать.
Оставить комментарий
Имя или ник:
Комментарий: