> > сервисы win32k.sys в драйвере ядра > > вообще это не самая хорошая мысль... стабильности системе > это явно не способствует...
Вот я тоже это нутром чувствую, а доказать не могу... :)
Вчера попробовал софтайсом скопировать первый дескриптор теневой таблицы в третий основной - всё работало, сервисы вызывались, система за два часа (не интенсивного, правда) пользования так и не упала... :)
Что интересно - компоненты ядра системы сами пытаются вызывать сервисы из диапазона номеров win32k, но поскольку дескриптора в основной таблице нет - благополучно обламываются, а вот если теневую таблицу скопировать на место основной - система живёт какое-то время (каждый раз по-разному) а потом выпадает в синий экран с ошибкой в win32k.sys
> посмотри здесь: > в принципе тоже не самый красивый способ (на всякий случай > - его придумал не я ;)) - подсмотрел в rootkit-e), но по > другому вряд ли получится.
Пасиб. Выкачал, буду думать... :)
> > Может быть, есть какие-нибудь другие способы заставить > > kernel-mode драйвер вызывать необходимые сервисы? > > на мой взгляд эти сервисы не зря вынесли в отдельную
Тут вот ставил эксперимент. Повесил фильтр на клавиатуру, при каждом нажатии вызывался 11BAh (NtUserMapvirtualkeyEx()) которому передавался сканкод клавиши, возвращаемый результат писался в файл. В результате выяснилось, что в большинстве случаев вызов, как ему и положенно, обламывался (ЕАХ=0), но иногда благополучно возвращал virtual-key code.
Это и есть обещаная нестабильность? Если у кого-то есть объяснение этому - просьба меня просветить... :) Есть мысль, что можно не мудрить с SDT, а просто стабилизировать единично возникающий ненулевой результат... :)
> таблицу - скорее всего их нельзя "безопасно" вызвать из > ядра, а посему это плохой путь....
Хз. Будем думать, будем тестировать... :)
> может ты изложишь проблему в целом? может без этого можно > обойтись?
Наверняка можно, осталось только выяснить, как... :)
Проблема на данный момент - найти нужное окно по заголовку, и ввести в него определённый текст с учётом текущей раскладки клавиатуры.
Понятно, что на уровне приложения такое делается просто, но вот надо чтоб всё было сделано в коде драйвера. Ясен пень, что глупость, но вот надо.... :)
|