Здравствуйте, drVanо, Вы писали:
V>Пытаюсь поменять защиту страниц у загруженного драйвера (у самого себя): V>... V>MmProtectMdlSystemAddress возвращает STATUS_NOT_MAPPED_VIEW
Один из возможных вариантов: IoAllocateMdl -> MmProbeAndLockPages -> MmGetSystemAddressForMdlSafe -> MmProtectMdlSystemAddress.
После этого можно писать по адресу, который вернула MmGetSystemAddressForMdlSafe.
Очистка: MmUnlockPages, IoFreeMdl.
V>Вопрос — а разве загруженный драйвер находится не в NonPagedPool?
Нет. Некоторые секции драйверов могут выгружаться, см. #pragma alloc_text, например.
Re[2]: Изменить аттрибуты страницам у загруженного драйвера
O>Один из возможных вариантов: IoAllocateMdl -> MmProbeAndLockPages -> MmGetSystemAddressForMdlSafe -> MmProtectMdlSystemAddress. O>После этого можно писать по адресу, который вернула MmGetSystemAddressForMdlSafe. O>Очистка: MmUnlockPages, IoFreeMdl.
Основная проблема в том, что я хочу проапдейтить уже замапленные виндовым лоадером страницы, чтобы драйвер мог писать по адресам внутри себя. Такое вообще возможно?
P.S. MmProbeAndLockPages + MmProtectMdlSystemAddress можно заменить одним MmProbeAndLockPages(mdl, KernelMode, IoWriteAccess)
Re[2]: Изменить аттрибуты страницам у загруженного драйвера
Здравствуйте, okman, Вы писали:
O>Один из возможных вариантов: IoAllocateMdl -> MmProbeAndLockPages -> MmGetSystemAddressForMdlSafe -> MmProtectMdlSystemAddress. O>После этого можно писать по адресу, который вернула MmGetSystemAddressForMdlSafe. O>Очистка: MmUnlockPages, IoFreeMdl.
Здравствуйте, drVanо, Вы писали:
V>Основная проблема в том, что я хочу проапдейтить уже замапленные виндовым лоадером страницы, V>чтобы драйвер мог писать по адресам внутри себя. Такое вообще возможно?
Только через извращения типа правки PTE (Page Table Entry).
А чем предложенный способ не устраивает ?
V>Насколько я понимаю результат MmMapLockedPagesSpecifyCache нужно очищать через MmUnmapLockedPages.
В данном случае это не требуется, при вызове MmUnlockPages отображение будет снято.
When the system-address-space mapping that is returned by MmGetSystemAddressForMdlSafe is
no longer needed, it must be released. The steps that are required to release the mapping
depend on how the MDL was built. These are the four possible cases:
If the MDL was built by a call to the MmProbeAndLockPages routine, it is not necessary to
explicitly release the system-address-space mapping. Instead, a call to the MmUnlockPages
routine releases the mapping, if one was allocated.
...
Re[4]: Изменить аттрибуты страницам у загруженного драйвера
Здравствуйте, okman, Вы писали:
V>>Основная проблема в том, что я хочу проапдейтить уже замапленные виндовым лоадером страницы, V>>чтобы драйвер мог писать по адресам внутри себя. Такое вообще возможно? O>Только через извращения типа правки PTE (Page Table Entry).
Хренова
O>А чем предложенный способ не устраивает ?
Есть RWX сегмент, часть из которого код, а часть — данные. Хочецца до DriverEnrty приделать страницам данных нужный тип.
V>>Насколько я понимаю результат MmMapLockedPagesSpecifyCache нужно очищать через MmUnmapLockedPages. O>В данном случае это не требуется, при вызове MmUnlockPages отображение будет снято.
Спасибо.
Re[3]: Изменить аттрибуты страницам у загруженного драйвера
V>Основная проблема в том, что я хочу проапдейтить уже замапленные виндовым лоадером страницы, чтобы драйвер мог писать по адресам внутри себя. Такое вообще возможно?
#pragma comment(linker, "/SECTION:.text,RWE")
и всё. не надо менять никакие атрибуты страницы. нужно просто правильно собрать драйвер
Re[4]: Изменить аттрибуты страницам у загруженного драйвера
Здравствуйте, verizon, Вы писали:
V>>Основная проблема в том, что я хочу проапдейтить уже замапленные виндовым лоадером страницы, чтобы драйвер мог писать по адресам внутри себя. Такое вообще возможно? V>#pragma comment(linker, "/SECTION:.text,RWE") V>и всё. не надо менять никакие атрибуты страницы. нужно просто правильно собрать драйвер