Можно ли сделать часть кода драйвера "невыгружаемой", т.е., после даже после того как весь драйвер сброшен, чтоб эта часть осталась в памяти? Первое что приходит в голову - сделать алокацию памяти и скопировать туда "невыгружаемую" часть, но может есть более правильное/элегантное решение?
asmfan а при чем тут секции? либо опция линкеру обычно таки делают. ExAllocatePool + перенос кода с коррекцией фиксапов и все.
katrus MmLockPagableCodeSection ? IRQL == PASSIVE_LEVEL http://www.osronline.com/ddkx/kmarch/k106_2dde.htm
TOR И что? Это лишь блокирует в памяти секцию кода, если она выгружаемая. После выгрузки драйвера секция будет освобождена в обычном порядке
Так ведь задача какая: Т.е. я понял что под сбросом понимается сброс в своп системой или в ручную, а не выгрузка драйвера.
TOR Нет, не верно. Вопрос именно в том как оставить несколько ф-ий драйвера в памяти после того как ВЕСЬ драйвер выгружен (т.е. завершен).
А можно ли запустить еше один экземпляр драйвера? Т.е. если нет достаточно простого метода оставить часть драйвера в памяти после его завершения, я подумал, что можно оставить старый экземпляр (закрыв в нем deviceobject) и запустить новый
z0mailbox Такой финт выйдет тупым созданием нового ключа в HKLM\SYSTEM\CurrentControlSet\Services и вызовом кернел апи ZwLoadDriver. Создание ключа штатными средствами ntoskrnl выполняется на ура. либо можно найти неэкспортируемую MmLoadSystemImage или worker-поток, выполняющий IopLoadUnloadDriver.
я тоже так думал пока не обломался с вызовом zwloaddriver не помню правда на какой системе, вроде 2к3 вызов проверял откуда буфер с юникоде-стринг и если ниже mmendusermemory-как-то-там - досвиданья, только если из юзер-мода работал так что в серьезном продукте я б на этот финт не рассчитывал
z0mailbox ну аттачнись к чьему-нибудь аддрес спейсу (KeStackAttachProcess, если ты конечно не в контексте валидного юзермодного процесса. если уже в нем, то пропускай этот этап), промапь буфер в юзермод (MmMapLockedPages), и спокойно вызывай, раз говоршь что проверяет.. но, насколько я помню, буфер не проверяется на положение в юзермодном АП. видно это либо твоя ошибка в чемто, либо новые премудрости 2к3.