Хотелось бы разобраться как именно реализуется данная функция на IA32 на уровне ассемблерных команд, чтобы, возможно, потом ее реализовать самостоятельно, без DDK. Еще мне не совсем понятно, как так получается, что после ее выполнения адреса которые были исходно в контексте присоединяющегося потока там же и остаются. Ведь казалось бы, что меняя контекст меняется и адресное пространство, но, как показывает опыт, после выполнения функции доступ к глобальным переменным в драйвере сохраняется...
яж тебе уже в аське объяснял, перегружает CR3, кроме того, делает настройку регистров fs, загружает по необходимым адресам EPROCESS и прочее, ну и , может быть что то еще, доточно не разбирался )
CARDINAL У меня хистори тада не сохранялась ...Ну и как тогда поток после всего этого к глобальным адресам в драйвере может свободно обращаться? Например по адресу pDE... Я конечно понимаю, что можно настроить таблицу страниц процесса, чтобы обращаться по правильному физическому адресу посредством старого указателя pDE, но может это как-то проще реализуется в KeStackAttachProcess?
ЧТО ТО я тебя не понял, ты сначала разберись как устроена память виндовая. Страничная изоляция существует только для юзермодной памяти. В ядре изоляция к примеру осуществлена для таблиц каталогов страниц, ну и еще некоторых тебе ненужных ресурсов. Так что за глобальность адресов в драйвере можешь не бояться )