Неужели никто не перехватывал функции из win32k.sys? Проблема в следующем: Делаю перехват таким образом: 1. Определяю адрес KeServiceDescriptorTableShadow; 2. Открываю crss.exe; 3. Создаю в нем поток; 4. В функции потока записываю в ETHREAD-TCB-ServiceTable данного потока адрес KeServiceDescriptorTableShadow, который получил ранее; 5. Сохраняю адрес оригиниальной функции; 6. Заменяю адрес нужной функции в KeServiceDescriptorTableShadow; 7. Закрываю поток; В результате нужная функция перехватывается. При выгрузке драйвера: 1. Открываю crss.exe; 2. Создаю в нем поток; 3. В функции потока записываю в ETHREAD-TCB-ServiceTable данного потока адрес KeServiceDescriptorTableShadow, который получил ранее; 4. Заменяю адрес нужной функции в KeServiceDescriptorTableShadow на сохраненный ранее адрес оригинальной функции; 5. Закрываю поток; Вроде как все нормально, но если после выгрузки драйвера происходит вызов функции, которую я перехватывал, то возникает синий экран - DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_ OPERATIONS
Хук KeServiceDescriptorTableShadow принципиально ничем не отличается от хука KeServiceDescriptorTable. Просто где-то накосячил. Зачем манипуляции с crss не понятно.
Меня собственно интересует не хук KeServiceDescriptorTableShadow, а хук функций, реализованных в win32k.sys. А поскольку они содержатся в KeServiceDescriptorTableShadow, то приходится и искать адрес KeServiceDescriptorTableShadow и производить манипуляции с ней. Я многого конечно пока не понимаю, но в некоторых умных статьях (книгах) упоминается о том, что содержимое SST win32k отображается на UserMode адреса, и поэтому чтение или редактирование SST win32k необходимо производить только из GUI процесса. Читать (не говоря уж об изменении) содержимое SST win32k из режима ядра я пробовал - моментально получается синий экран - PAGE_FAULT_IN_NONPAGED_AREA.
Да, win32k.sys и все видеодрайвера отображаются на юзермодные адреса, и только в GUI процессы. В атаче мои маленькие эксперименты на эту тему. Авось чем-нибудь помогут. 224011978__klog.rar
За исходники спасибо. Они правда не собираются, из-за отсутствия ряда заголовочных файлов. Но суть понятна и без них. Ошибку у себя нашел и исправил. Теперь все работает нормально.