Известно, что по хэндлу "проекция файла" можно вызовами MapViewOfFile добиться того, что несколько страниц адресного пространства процесса будут отображены на одни и те же страницы физической памяти. Хотелось бы вызвать MapViewOfFile применительно к загруженным dll процесса (может быть, кроме ntdll.dll), но не знаю как получить хэндлы "проекция файла" у dll, полученных, как я подозреваю, загрузчиком. Скажите пожалуйста, выполнима ли данная задача? Я имею в виду, что во-первых можно ли получить эти хэндлы, а, во-вторых, можно ли потом вызвать MApViewOfFIle, передать ей эти параметры и спроецировать другие на страницы на ту же самую физическую память dll. Или dll грузяться совсем как-то по-особому. Заранее благодарю.
Re: Как получить хэндл dll?
От:
Аноним
Дата:
31.01.07 21:34
Оценка:
HANDLE na mapping zakrivaetsa zagruzchikom srazu posle otobrazhenia ego v pamyat
Здравствуйте, Аноним, Вы писали:
А>HANDLE na mapping zakrivaetsa zagruzchikom srazu posle otobrazhenia ego v pamyat
А где можно про это поподробнее почитать. Читал Рихтера и Руссиновича, что-то ничего не смог найти.
Здравствуйте, maratrus, Вы писали:
M>Известно, что по хэндлу "проекция файла" можно вызовами MapViewOfFile добиться того, что несколько страниц адресного пространства процесса будут отображены на одни и те же страницы физической памяти. Хотелось бы вызвать MapViewOfFile применительно к загруженным dll процесса (может быть, кроме ntdll.dll), но не знаю как получить хэндлы "проекция файла" у dll, полученных, как я подозреваю, загрузчиком. Скажите пожалуйста, выполнима ли данная задача? Я имею в виду, что во-первых можно ли получить эти хэндлы, а, во-вторых, можно ли потом вызвать MApViewOfFIle, передать ей эти параметры и спроецировать другие на страницы на ту же самую физическую память dll. Или dll грузяться совсем как-то по-особому. Заранее благодарю.
При загрузке DLL создается секция (section object, или file mapping), с атрибутом защиты copy-on-write. Процессы могут отображать представления этой секции с атрибутом PAGE_WRITECOPY — таким образом при записи в страницы, принадлежащие созданному представлению, будет генерироваться исключение, которое диспетчер памяти обработает путем выделения новых страниц в физической памяти. С этого момента процесс, инициировавший запись в страницы представления, перестает их разделять с другими.