Здравствуйте, уважаемые. Сделал сплайс kssdoit. Вопрос в следующем: может ли быть прервано выполнение внутри системного сервиса? И вызван другой сервис? Собственно, все просто. Делаю подобие профайлера ядра. Нужно время, номер сист сервиса и номер SDT. Время получаю до выполнения kssdoit. Сразу после - еще раз время, считаю разность. Если выполнение внутри сист. сервиса будет прервано - все измерения будут неверными.
Если имеется в виду переключение потоков, то легко, ведь большинство сервисов ядра вызываются на PASSIVE_LEVEL. Чем встроенный профайлер не устраивает?
IceFire Да. > Теневые сервисы допускают и используют множественные рекурсивные вызовы. Это возврат в юзермод и вызов других сервисов. > Планирование исполняется при входе в сервисы, потоки переключаются. > Возможны програмная генерация исключений и аппаратные исключения, изза ошибок, они возникают переодически, хотя до возврата в юзермод никакие сервисы не будут вызваны(в случае не теневых). > Может быть вызван ZwTerminateProcess, в случае если изза невалидного стека потока ядро завершает процесс. > Сервисы вызываются при обработке других сервисов, в частности активно из Win32k(это Zw*). > Возможны вызовы сервисов после доставки апк, при его обработке. Например на сервисах ожидания. Нормально апк доставляется после возврата из сервиса. > Также возможны другие ситуации.
Если имеется ввиду вызов сервисов планировщиком - в таком случае нет, он не использует сирвисы, если я правильно вопрос понял.
Наверно изза этого у вас и падает дров при выгрузке - не соответствие числа входов в обработчик числу выходов.