Завершение процесса функцией TerminateThread

Тема в разделе "WASM.WIN32", создана пользователем Crash, 9 июл 2006.

  1. Crash

    Crash New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2004
    Сообщения:
    73
    Как можно завершить процесс, зная его PID или хендл, используя функцию TerminateThread?
     
  2. SnugForce

    SnugForce New Member

    Публикаций:
    0
    Регистрация:
    2 май 2005
    Сообщения:
    373
    Адрес:
    Из домУ
    Замочить первый поток т.е. главный...
     
  3. MegaZu

    MegaZu New Member

    Публикаций:
    0
    Регистрация:
    22 июл 2005
    Сообщения:
    290
    SnugForce
    И ничего не будет. Надо все потоки прибить.
     
  4. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Crash
    Молотек.exe тебе в помощь! Все замочит!
     
  5. Crash

    Crash New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2004
    Сообщения:
    73
    А если я прибью первый поток, это поможет? А как достать этот самый первый поток?
     
  6. Julius

    Julius New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2003
    Сообщения:
    42
    Нефига не поможет сказали же... Все потоки процесса равноправны, за исключением того, что так называемый "главный поток" создается первым и всегда. Тебе придется их либо поубивать все самому, либо воспользоваться, например, TerminateProcess.
     
  7. Crash

    Crash New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2004
    Сообщения:
    73
    Это я знаю. Просто пишу драйвер для перехвата NtTerminateThread. Мне нужно знать, как можно завершить процесс, используя функцию NtTerminateThread.

    Но, получается, чтобы прибить процесс этой функцией, нужно завершить все его потоки.
    Интересно, а как перечислить все потоки процесса? Это можно сделать через NtQuerySystemInformation?
     
  8. MegaZu

    MegaZu New Member

    Публикаций:
    0
    Регистрация:
    22 июл 2005
    Сообщения:
    290
    угу. Тока это все RTFM вопросы .... покури доки ...
     
  9. Julius

    Julius New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2003
    Сообщения:
    42
    http://www.alexfedotov.com/samples/threads.asp
     
  10. SnugForce

    SnugForce New Member

    Публикаций:
    0
    Регистрация:
    2 май 2005
    Сообщения:
    373
    Адрес:
    Из домУ
    2 MegaZu
    Точно, а я и не заметил, что процесс остается в памяти...
     
  11. Crash

    Crash New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2004
    Сообщения:
    73
    Спасибо за пример! Получается, мне нужно перехватывать не NtTerminateThread, а NtOpenThread? Но хотелось бы все-таки NtTerminateThread. Так есть какой-нибудь способ определить, принадлежит ли поток с известным хендлом процессу с известным PID? Наподобие функции GetProcessIdOfThread? Такая есть, но только в UserMode и в Windows 2003 Server :dntknw:
     
  12. MegaZu

    MegaZu New Member

    Публикаций:
    0
    Регистрация:
    22 июл 2005
    Сообщения:
    290
    Код (Text):
    1. ThreadInfo = ExAllocatePool(PagedPool, sizeof(THREAD_BASIC_INFORMATION));
    2.    
    3. if (!NT_SUCCESS(ZwQueryInformationThread(*ThreadHandle,ThreadBasicInformation,ThreadInfo,sizeof(THREAD_BASIC_INFORMATION),NULL)))
    4.                 {
    5.                     DPRINT("NtQueryInformationThread failed\n");
    6.                 }
    7.                 else
    8.                 {
    9.                     DPRINT("ThreadInfo.ClientId.UniqueProcess %d\n",ThreadInfo->ClientId.UniqueProcess);
    10.                 }
    11.  
    12.    
    13.  
    14.     ExFreePool(ThreadInfo);
     
  13. Crash

    Crash New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2004
    Сообщения:
    73
    Хорошо. Всем спасибо!