Возникла такая проблема, необходимо чтоб программа реагировала на любые изменения: — добавление/удаление сервиса — остановка/запуск — и желательно на изменение конфигурации сервиса Подскажите пожалуйста, как с этим разобраться, или хоть куда копать.
Такой перехват не даст возможность следить за win32 службами. Тем более не даст достоверной информации про остановку (ZwUloadDriver) сервиса, т.к. сервис может остановить себя. Также не поможет для реакции на регистрацию сервиса. Главное именно остановка - запуск, так как другое можно поймать по изменениям реестра.
Мутное это дело. Лучше перехватывай соответствующие функции в advapi32.dll. На самом деле AFAIK всё это дело проходит через RPC с процессом servicies.exe.
Итого: узнать о регистрации и запуске сервиса можно перехватом АПИ. Про изменение настроек сервисов следя за реестром. Но как отловить, если сервис останавливает сам себя? Неужели только перепроверкой состояний всех сервисов через промежутки времени?..
Такое вот наблюдение: количество активных сервисов равно сумме дочерних процессов services.exe и потоков в данном процессе - 1. Вопрос - это совпадение? Если нет, то получаеться, что можно перехватом функций создания потока/процесса также определить момент запуска. Но можно ли отсюда получить возможность узнать про остановку сервиса?
я бы посоветовал просто по таймеру делать EnumServicesStatusEx если нужен более ювелирный метод - это весьма сложно и ненедежно реализовать