как правильно завершить процесс

Тема в разделе "WASM.WIN32", создана пользователем cresta, 2 янв 2006.

  1. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Код (Text):
    1.     mov     eax,pid
    2.     mov     hProcess,eax
    3.     mov     cid.UniqueProcess,eax
    4.     mov     cid.UniqueThread,0
    5.    
    6.     invoke  ZwOpenProcess, addr hProcess, 1, addr oa, addr cid
    7.     .if (eax==STATUS_SUCCESS)
    8.         invoke  ZwTerminateProcess, hProcess, 0
    9.         invoke  ZwClose, hProcess
    10.         mov     eax,STATUS_SUCCESS
    11.         ret
    12.     .endif




    Этот код завершает процессы корректно, кроме одного единственного процесса.

    Т.е. этот процесс завершается, но после этого система уходит в ребут :dntknw:

    Все ли необходимые действия по завершению процесса в коде присутствуют, или нужно выполнять ещё какие-то действия, кроме ZwOpenProcess, ZwTerminateProcess, ZwClose ?



    В частности, если к процессу была подгружена dll с хуком, надо ли отгрузить её перед закрытием процесса, а если надо, то как это сделать?

    Спасибо.
     
  2. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"


    Не csrss.exe случайно?

    Корректно завершить ЛЮБОЙ процесс невозможно потому, что без некоторых процессов винда жить не может.
     
  3. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Нет, это не csrss.exe. Это вообще не системный процесс. Обычный пользовательский, правда скрытый. Я его нахожу и завершаю, а предотвратить перезагрузку не получается.
     
  4. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    Любой обычный процесс твой код должен завершать корректно, но в данном случае это значит, что в системе сидит что-то контролирующее целостность этого процесса (например драйвер).
     
  5. Saint German

    Saint German New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2003
    Сообщения:
    222
    А какой номер ошибки и адрес, так определить можно что за модуль, и делать какие-то выводы.
     
  6. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Похоже, это сам скрытый процесс некорректно себя ведёт: даже если его не закрывать и ничего ему не вешать (хук и т.п.), то после его запуска попытка запустить например RadAsm или справку msdn вызывают перезагрузку с ошибкой PAGE_FAULT_IN_NONPAGE_AREA (уже поплатился испорченным radasm.ini, пришлось заново настраивать иде)

    Попробую закачать filemon и посмотреть им на создание файлов, хотя явно ничего не создается.
     
  7. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    cresta

    гыгы...

    а ты случаем не svchost или smss завершаешь ??? ну дак чево ты удивляешься, есессено тока ребут, =))))))))
     
  8. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    CARDINAL



    гыгыгы...

    Нет, случаем не svchost и не smss

    Случаем phantom.exe
     
  9. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    cresta, попробуй получить все Thread'ы процесса, и пропустить через ZwTerminateThread.
     
  10. keks_n

    keks_n New Member

    Публикаций:
    0
    Регистрация:
    10 янв 2006
    Сообщения:
    1
    cresta это тот phantom, что на Steath 4? И который выдаёт при завершении синий экран с сообщением о ошибке в ntoskrnl.exe? Так он корректно завершается очень редко... И всё равно через некоторое время выдаст синий экран :)