Изменить аттрибуты страницам у загруженного драйвера
От: drVanо Россия https://vmpsoft.com
Дата: 05.07.15 04:40
Оценка:
Пытаюсь поменять защиту страниц у загруженного драйвера (у самого себя):

bool VirtualProtect(PVOID address, ULONG size, ULONG protect)
{
    PMDL mdl = IoAllocateMdl(address, size, FALSE, FALSE, NULL);
    if (!mdl)
        return false;
    MmBuildMdlForNonPagedPool(mdl);
    NTSTATUS res = MmProtectMdlSystemAddress(mdl, protect);
    IoFreeMdl(mdl);
    return (res == STATUS_SUCCESS);
}


MmProtectMdlSystemAddress возвращает STATUS_NOT_MAPPED_VIEW

Вопрос — а разве загруженный драйвер находится не в NonPagedPool?
Re: Изменить аттрибуты страницам у загруженного драйвера
От: okman Беларусь https://searchinform.ru/
Дата: 05.07.15 08:16
Оценка:
Здравствуйте, drVanо, Вы писали:

V>Пытаюсь поменять защиту страниц у загруженного драйвера (у самого себя):

V>...
V>MmProtectMdlSystemAddress возвращает STATUS_NOT_MAPPED_VIEW

Один из возможных вариантов: IoAllocateMdl -> MmProbeAndLockPages -> MmGetSystemAddressForMdlSafe -> MmProtectMdlSystemAddress.
После этого можно писать по адресу, который вернула MmGetSystemAddressForMdlSafe.
Очистка: MmUnlockPages, IoFreeMdl.

V>Вопрос — а разве загруженный драйвер находится не в NonPagedPool?


Нет. Некоторые секции драйверов могут выгружаться, см. #pragma alloc_text, например.
Re[2]: Изменить аттрибуты страницам у загруженного драйвера
От: drVanо Россия https://vmpsoft.com
Дата: 05.07.15 08:57
Оценка:
O>Один из возможных вариантов: IoAllocateMdl -> MmProbeAndLockPages -> MmGetSystemAddressForMdlSafe -> MmProtectMdlSystemAddress.
O>После этого можно писать по адресу, который вернула MmGetSystemAddressForMdlSafe.
O>Очистка: MmUnlockPages, IoFreeMdl.

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

P.S. MmProbeAndLockPages + MmProtectMdlSystemAddress можно заменить одним MmProbeAndLockPages(mdl, KernelMode, IoWriteAccess)
Re[2]: Изменить аттрибуты страницам у загруженного драйвера
От: drVanо Россия https://vmpsoft.com
Дата: 05.07.15 08:59
Оценка:
Здравствуйте, okman, Вы писали:

O>Один из возможных вариантов: IoAllocateMdl -> MmProbeAndLockPages -> MmGetSystemAddressForMdlSafe -> MmProtectMdlSystemAddress.

O>После этого можно писать по адресу, который вернула MmGetSystemAddressForMdlSafe.
O>Очистка: MmUnlockPages, IoFreeMdl.

Кстати еще один вопрос:

#define MmGetSystemAddressForMdlSafe(MDL, PRIORITY)                    \
     (((MDL)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA |                    \
                        MDL_SOURCE_IS_NONPAGED_POOL)) ?                \
                             ((MDL)->MappedSystemVa) :                 \
                             (MmMapLockedPagesSpecifyCache((MDL),      \
                                                           KernelMode, \
                                                           MmCached,   \
                                                           NULL,       \
                                                           FALSE,      \
                                                           (PRIORITY))))


Насколько я понимаю результат MmMapLockedPagesSpecifyCache нужно очищать через MmUnmapLockedPages.
Re[3]: Изменить аттрибуты страницам у загруженного драйвера
От: okman Беларусь https://searchinform.ru/
Дата: 05.07.15 11:23
Оценка:
Здравствуйте, drVanо, Вы писали:

V>Основная проблема в том, что я хочу проапдейтить уже замапленные виндовым лоадером страницы,

V>чтобы драйвер мог писать по адресам внутри себя. Такое вообще возможно?

Только через извращения типа правки PTE (Page Table Entry).
А чем предложенный способ не устраивает ?

V>Насколько я понимаю результат MmMapLockedPagesSpecifyCache нужно очищать через MmUnmapLockedPages.


В данном случае это не требуется, при вызове MmUnlockPages отображение будет снято.

MmGetSystemAddressForMdlSafe
https://msdn.microsoft.com/en-us/library/windows/hardware/ff554559%28v=vs.85%29.aspx

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]: Изменить аттрибуты страницам у загруженного драйвера
От: drVanо Россия https://vmpsoft.com
Дата: 05.07.15 14:37
Оценка:
Здравствуйте, okman, Вы писали:

V>>Основная проблема в том, что я хочу проапдейтить уже замапленные виндовым лоадером страницы,

V>>чтобы драйвер мог писать по адресам внутри себя. Такое вообще возможно?
O>Только через извращения типа правки PTE (Page Table Entry).

Хренова

O>А чем предложенный способ не устраивает ?


Есть RWX сегмент, часть из которого код, а часть — данные. Хочецца до DriverEnrty приделать страницам данных нужный тип.

V>>Насколько я понимаю результат MmMapLockedPagesSpecifyCache нужно очищать через MmUnmapLockedPages.

O>В данном случае это не требуется, при вызове MmUnlockPages отображение будет снято.

Спасибо.
Re[3]: Изменить аттрибуты страницам у загруженного драйвера
От: verizon  
Дата: 07.07.15 20:00
Оценка:
V>Основная проблема в том, что я хочу проапдейтить уже замапленные виндовым лоадером страницы, чтобы драйвер мог писать по адресам внутри себя. Такое вообще возможно?
#pragma comment(linker, "/SECTION:.text,RWE")
и всё. не надо менять никакие атрибуты страницы. нужно просто правильно собрать драйвер
Re[4]: Изменить аттрибуты страницам у загруженного драйвера
От: mike_rs Россия  
Дата: 15.07.15 11:57
Оценка:
Здравствуйте, verizon, Вы писали:

V>>Основная проблема в том, что я хочу проапдейтить уже замапленные виндовым лоадером страницы, чтобы драйвер мог писать по адресам внутри себя. Такое вообще возможно?

V>#pragma comment(linker, "/SECTION:.text,RWE")
V>и всё. не надо менять никакие атрибуты страницы. нужно просто правильно собрать драйвер

не сможете использовать на win10
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.