Доброго времени суток, Вопрос возник по поводу PspCreateProcessNotifyRoutine. Вообще как понял - это переменная ядра, проецируемая на адресное пространство каждого процесса. И представляет собой массив указателей на поцедуры вызываемые при создании и удалении процесса. В отладчике выводится массив адресов начинающихся с e16f04e7 . но по каждому из этих адресов какая то ерунда, может на мой не опытный взгляд конечно, но процедурами там не пахнет... Знает кто нить где все таки адреса этих процедур, и вообще как можно добавлять и удалять последние из этого массива??? (иными словами можно ли добавить указатель на свою процедуру в этот массив?) если кто знает ссылки кидайте, потому что вопросов по этой теме у меня возникло больше чем описано выше =)
Vic Никуда она не проецируется, эта переменная в ядре. PsSetCreateProcessNotifyRoutine() добавляет нотификатор в эту таблицу.
эм... таак, теперь заранее прошу прощения, может совру но тогда не очень понимаю: переменная в ядре -> образ ядра проецируется на адресное пространство процесса (диапазон сист. адресов), так разве не прав говоря , что переменная проецируется??
не проецируется никуда, сказали же она "как бы" общая. у процесса свое пространство только в user mode, а ядро одно на всех. з.ы. Clerk чур не пинать мну)))
хорошо , суть понятна, признаю выразился не корректно... В описании переменной сказано, что max элементов массива 8, т.е. 8 процедур. Если добавляю 9ую, функция завершится неудачно получается??
Vic Юзермодное адресное пространство ограничивается адресом 0x7FFE0FFF, всё что выше для юзермода не доступно. Из ядра доступно, так предел сегмента определён в дескрипторе, а для ядерных соответственно лимит -1. Образ ядра никуда не проецируется, просто перезагружается регистр Cr3(каталог страниц определяет) при смене адресного пространства, при аттаче к процессу. Зарегать больше 8 (для XP) не получится - возвратится ошибка.
Потомучто с адреса 0x7FFE0000 выделена страница разделяемой ядром памяти, а остальная память до начала системного адресного пространства(тоесть 31 страница) зарезервирована дабы ловить исключения.
хм, у Руссиновича ничего про это не написано вроде... а есть ссылка что почитать, потому что сходу сложновато ... что за разделяемая ядром память?? А исключения - речь о фреймах ловушек??
UserSharedData, там инфа о системе, процессоре, счётчики времени и пр. Исключения генерировать при проверках, аналогично как и начало системного ап зарезервировано. Смотри к примеру теневые сервисы как проверки адресов делоют. Нет, не знаю что предложить.