Отображение на вирт. память физических страниц

Тема в разделе "WASM.NT.KERNEL", создана пользователем anatolymik, 4 апр 2011.

  1. anatolymik

    anatolymik New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2009
    Сообщения:
    62
    Здраствуйте Ребята!

    Интересует следующее: как отобразить на виртуальные адреса непоследовательные физические страницы памяти? Т.е. например есть физическая страница с адресом 0 и физическая страница с адресом 8096. И отобразить их чтобы на вирт. адресах они были последовательно. Я сложно объясняю.
    На самом деле мне не нужны физические страницы с конкретными адресами, расскажу какая задача. Через MmMapIoSpace отображаю конфигурационное пространство, но мне надо чтобы первые 4к были не само конфигурационное пространство а простая память. Я это сделал, но не использовал средства виндозы. А наверно они есть. Я в мсдн все излазил. Три варианта, плохо искал, мало опыта или всетаки таких средств нет.

    Сделал я так:
    1) MmMapIoSpace получаем адрес
    2) x = ExAllocatePool(NonPaged, 4096) выделяем память
    3) По этому адресу ищем соответствующую ей PTE
    4) y = MmGetPhysicalAddress(x)
    5) Заменяем в PTE адрес на Y
    6) Делаем invlpg

    Надеюсь это временное решение. Чтонибудь подскажете по моей проблеме?