На Windows 10 x64 вызываю ZwProtectVirtualMemory из LoadImageNotifyRoutine при загрузке User32.dll, но с любым флагом защиты кроме исходного PAGE_EXECUTE_READ она возвращает 0xC0000045 (STATUS_INVALID_PAGE_PROTECTION). Это для обычного процесса, не защищенного, у которых возвращается 0xC0000604 (STATUS_DYNAMIC_CODE_BLOCKED). Как это можно обойти? Или просто пропатчить секцию в User32.dll не используя ни чего не документированного и не универсального?
Vicshann, Наверно прав не хватает, на 10-ке нельзя тупо менять страничные атрибуты. Это тебе повезло что ядро твой поток не прибило. А есчо в ядре используют не Zw, а Nt - апи. Новость тебе такая.
Каких прав может не хватить у драйвера ядра? А ZwProtectVirtualMemory как экспортируется ядром, так и есть, ни каких NtProtectVirtualMemory в его таблице экспорта нет. Может что-то не до конца инициализировалось еще, когда LoadImageNotifyRoutine вызывается, потому что с пользовательского уровня NtProtectVirtualMemory меняет защиту секции без проблем. Вот об этом я и спрашиваю.
Vicshann, В ядре права базовые это предыдущий мод, который должен быть изменён. Если твой тред ядерный соотв. у тебя нулевой уровень привилегий, но не установлен софт маркер - ядро доступ заблочит, так всё ядро работает. В этом разница между Nt и Zw апи. Если ты что то напутал с этим маркером, то не смотря на ядерный мод обработка аргументов будет как у юзер треда, с ограничениями(нп указатель будет проверен на диапазон юзер адресов и будет ошибка).
Vicshann, Поведение предсказать невозможно, загрузчик не отработал ты рекурсивно вызываешь не допустимую для вызова функцию работы с памятью, которая меняет контекст. Отладчиком посмотреть разумеется религия не позволяет". Не понимаю как можно такое вот собирать без возможности отладки. Это походу наверно как всегда - опции студии или чем ты собираешь(конечно же с гуем и кнопками) изучил, копипастой какой то файл взял и внёс изменения. Конечно всё падает и что с этим делать не понятно, как и не понятно что за вызовы и код делает. Обычное дело, ядро механизмы вначале нужно понять, затем юзать, на оборот не получится. Метод перебора апи в ядре не работает, будут бесконечные падения. Ты даже не удосужился посмотри минидамп, хотя врядле знаешь что это.
Я это испытываю на своем драйвере "защиты", который еще в 2012 году делал. Конечно сейчас многое поменялось, но я с тех пор не занимался драйверами