Перехват изменений в базе SCM

Тема в разделе "WASM.WIN32", создана пользователем Ation, 28 фев 2007.

  1. Ation

    Ation New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2005
    Сообщения:
    92
    Адрес:
    Zaporozhie
    Возникла такая проблема, необходимо чтоб программа реагировала на любые изменения:
    — добавление/удаление сервиса
    — остановка/запуск
    — и желательно на изменение конфигурации сервиса
    Подскажите пожалуйста, как с этим разобраться, или хоть куда копать.
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Зачем тебе SCM? Сразу отслеживай доступ к реестру и запуск через ZwLoadDriver.
     
  3. Ation

    Ation New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2005
    Сообщения:
    92
    Адрес:
    Zaporozhie
    Такой перехват не даст возможность следить за win32 службами. Тем более не даст достоверной информации про остановку (ZwUloadDriver) сервиса, т.к. сервис может остановить себя.
    Также не поможет для реакции на регистрацию сервиса.
    Главное именно остановка - запуск, так как другое можно поймать по изменениям реестра.
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Мутное это дело. Лучше перехватывай соответствующие функции в advapi32.dll. На самом деле AFAIK всё это дело проходит через RPC с процессом servicies.exe.
     
  5. rav

    rav New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2004
    Сообщения:
    159
    Адрес:
    Москва
    Всё проходит не через RPC, а LPC. Пакеты там недокументированные, меняются от версии к версии.
     
  6. Ation

    Ation New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2005
    Сообщения:
    92
    Адрес:
    Zaporozhie
    Итого: узнать о регистрации и запуске сервиса можно перехватом АПИ.
    Про изменение настроек сервисов следя за реестром.
    Но как отловить, если сервис останавливает сам себя? Неужели только перепроверкой состояний всех сервисов через промежутки времени?..
     
  7. Ation

    Ation New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2005
    Сообщения:
    92
    Адрес:
    Zaporozhie
    Такое вот наблюдение: количество активных сервисов равно сумме дочерних процессов services.exe и потоков в данном процессе - 1.
    Вопрос - это совпадение?
    Если нет, то получаеться, что можно перехватом функций создания потока/процесса также определить момент запуска. Но можно ли отсюда получить возможность узнать про остановку сервиса?
     
  8. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    я бы посоветовал просто по таймеру делать EnumServicesStatusEx
    если нужен более ювелирный метод - это весьма сложно и ненедежно реализовать
     
  9. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    z0mailbox
    +1