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

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

  1. WaterGhost

    WaterGhost New Member

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

    n0name New Member

    Публикаций:
    0
    PsSetCreateProcessNotify можно и буез перехвата
     
  3. WaterGhost

    WaterGhost New Member

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

    n0name New Member

    Публикаций:
    0
    нет. Система при завершении процесса вызывает твой нотификатор, который ты ставишь с помошью PsSetCreateProcessNotify
     
  5. WaterGhost

    WaterGhost New Member

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

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

    wasm_test wasm test user

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

    wasm_test wasm test user

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

    WaterGhost New Member

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

    n0name New Member

    Публикаций:
    0
    ни черта не правильно. почитай хотя бы KmdTut. не говорю уж про MSDN/DDK.
     
  10. WaterGhost

    WaterGhost New Member

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

    WaterGhost New Member

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

    wsd New Member

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

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

    wasm_test wasm test user

    Публикаций:
    0
    Ну типа того)

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

    Код (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. wasm_test

    wasm_test wasm test user

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

    wsd New Member

    Публикаций:
    0
    Great
    он его в цитирование впарил...
     
  17. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    wsd
    А, хыхы. Заметил)
     
  18. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Эк его ядро торкнуло..
     
  19. Marik

    Marik New Member

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

    z0mailbox z0

    Публикаций:
    0
    Marik
    А если совсем по-простому - через секьюрити?