Детектинг завершения процессов

Тема в разделе "WASM.NT.KERNEL", создана пользователем WaterGhost, 22 сен 2007.

  1. WaterGhost

    WaterGhost New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2007
    Сообщения:
    130
    Есть драйвер режима ядра. Мне необходимо мониторить всю систему и ловить завершение процессов с получением их PID. Не подскажете какие функции нада перехватывать для этого? Всем заранее спасибо.
     
  2. n0name

    n0name New Member

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

    WaterGhost New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2007
    Сообщения:
    130
    Это как без перехвата ? Я так понял перехватываешь PsSetCreateProcessNotify и по нему узнаешь какой процесс закрывают и можно какнить получить PID процесса... ведь так ?
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    нет. Система при завершении процесса вызывает твой нотификатор, который ты ставишь с помошью PsSetCreateProcessNotify
     
  5. WaterGhost

    WaterGhost New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2007
    Сообщения:
    130
    Все понял. Но тут возникает еще одна проблема. Получается мне нада мониторить запуск процессов для того чтобы добавить им калбэк, это не есть гуд... я все прально понял ? И еще... процесс завершается, вызывает нотификатор. Куда передается управление ?

    П.С. В MSDN мало что по этому поводу написано =\
     
  6. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Oh my god :)
    PsSetCreateProcessNotifyRoutine ставит обработчик, который вызовется при создании/завершении процесса. Перехватывать ее саму нет смысла. Достаточно с ее помощью поставить обработчик.
    Либо перехватывать NtTerminateProcess.
    Но лучше первое - это документировано
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Да все прекрасно там написано! Калбек надо ставить ОДИН раз и не надо потом ничего менять. Вызывается он системой. Управление передается к тебе в драйвер в функцию калбека, ты обрабатываешь както это событие и управление возвращается в функцию, вызывающую калбеки
     
  8. WaterGhost

    WaterGhost New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2007
    Сообщения:
    130
    Но чтобы поставить этот нотификатор, мне нада мониторить создание процесса(или как-то другим способом можно?) и пихать ему его чтобы он при завершении калбэк вызывал. Все правильно ?
     
  9. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    ни черта не правильно. почитай хотя бы KmdTut. не говорю уж про MSDN/DDK.
     
  10. WaterGhost

    WaterGhost New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2007
    Сообщения:
    130
    Ой, простите нубку) Кажись понял. PsSetCreateProcessNotifyRoutine добавляет в список системы калбэк на себя и по завершению\созданию процесса этот калбэк вызывается и по нему можно определить какой процесс и что с ним случилось. Верно ?)
     
  11. WaterGhost

    WaterGhost New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2007
    Сообщения:
    130
    Не могли бы привести пример поставки обработчика, а то никак не могу понять как он ставится. Ведь где-то должен быть на указатель на процедуру обработчика. не понимаю=\ сижу уже часа полтора... плииииз :dntknw:
     
  12. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    Создаёте свою функцию приёмки нотификации
    с заданной(В ддк) сигнатурой и передаёте её адрес
    MSDN

    Не нужно приводить описание функции здесь, достаточно ссылки!
     
  13. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Ну типа того)

    Ой все вам расписывать надо..

    Код (Text):
    1. VOID
    2. CreateProcessNotify(
    3.     IN HANDLE  ParentId,
    4.     IN HANDLE  ProcessId,
    5.     IN BOOLEAN  Create
    6.     )
    7. {
    8.   KdPrint(("Process with PID %d, PPID %d %s\n", ProcessId, ParentId, Create?"created":"terminated"));
    9. }
    10.  
    11.  
    12.  
    13. // Install callback
    14. Status = PsSetCreateProcessNotifyRoutine( CreateProcessNotify, FALSE );
    15.  
    16. ...
    17.  
    18. // Remove callback
    19. Status = PsSetCreateProcessNotifyRoutine( CreateProcessNotify, TRUE );
     
  14. WaterGhost

    WaterGhost New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2007
    Сообщения:
    130
    Вопрос снят... всем спасибо )
     
  15. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    WaterGhost
    А где твой текст сообщения?
     
  16. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    Great
    он его в цитирование впарил...
     
  17. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    wsd
    А, хыхы. Заметил)
     
  18. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Эк его ядро торкнуло..
     
  19. Marik

    Marik New Member

    Публикаций:
    0
    Регистрация:
    21 июн 2006
    Сообщения:
    166
    Адрес:
    Russia
    Доброго времени суток!
    У меня немного сходная задача... Есть драйвер, нужно защитить пользовательский процесс от "случайного" завершения. Я так понимаю PsSetCreateProcessNotify только мониторит создание\завершение процессов, но никак не влияет на результат. Пока из всех найденых методов - это хучить ZwTerminateProcess, но хочется обойтись документироваными способами (если они конечно имеются),а не перехватывать SDT, чтобы всякие антируткитные\антивирусные программы не ругались.... Кто нибудь может что нить подсказать по этому поводу?!
     
  20. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    Marik
    А если совсем по-простому - через секьюрити?