использовал для установки хуков в драйвере код, взятый у Ms-Rem: Код (Text): //устанавливаем перехваты __asm { cli // запрещаем прерывания mov eax, cr0 mov CR0Reg,eax and eax,0xFFFEFFFF // сбросить WP bit mov cr0, eax } ... ...устанавливаем хуки ... __asm { mov eax, CR0Reg mov cr0, eax // востановить содержимое CR0 sti // разрешаем прерывания } все вроде бы работало без глюков, но когда запустил драйвер на новой винде, произошел багчек. выяснилось, что на свежей винде не прописан параметр реестра EnforceWriteProtection=0, в ключе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management. если прописать его, то все работает нормально. но ведь вышеупомянутый код для того и служит ведь, чтобы можно было писать в ядерную память, не прибегая к юзанью реестра и ребута машины! что же получается, код не работает? при отсутствии этого параметра при записи в ядерную память валятся все винды, которые пробовал: от 2К без сервиспаков до 2К3. что делать и как-таки отключать защиту от записи в ядро, не юзая реестр и не ребутя систему?
sherion а процессор у тебя какой? и из-под vmware можешь попробовать? у меня athlon xp и пробовал на всех системах от 2к до 2к3 под vmware. nobody нет, новая винда - это любая свежепоставленная от 2к до 2к3. блин, вообще непонятно что делать. главное, под айсом даже нельзя посмотреть, что конкретно вызывает багчек, ибо айс этот ключ в реестре прописывает
romano Intel P4 старенький еще на ядре Willamette пробовал и в VMWare 4.5.2(тоже правда не последний писк) и там и там (в виртуалке) w2k sp4 prof rus
Интересно, может быть ксок памяти, который ты патчил находился в PagedPool, соответственно, инструкция CLI взвинтила уровень IRQL до максимума,и таким образом обработчик #PF не сработал. Это мое предположение