Нефига не поможет сказали же... Все потоки процесса равноправны, за исключением того, что так называемый "главный поток" создается первым и всегда. Тебе придется их либо поубивать все самому, либо воспользоваться, например, TerminateProcess.
Это я знаю. Просто пишу драйвер для перехвата NtTerminateThread. Мне нужно знать, как можно завершить процесс, используя функцию NtTerminateThread. Но, получается, чтобы прибить процесс этой функцией, нужно завершить все его потоки. Интересно, а как перечислить все потоки процесса? Это можно сделать через NtQuerySystemInformation?
Спасибо за пример! Получается, мне нужно перехватывать не NtTerminateThread, а NtOpenThread? Но хотелось бы все-таки NtTerminateThread. Так есть какой-нибудь способ определить, принадлежит ли поток с известным хендлом процессу с известным PID? Наподобие функции GetProcessIdOfThread? Такая есть, но только в UserMode и в Windows 2003 Server
Код (Text): ThreadInfo = ExAllocatePool(PagedPool, sizeof(THREAD_BASIC_INFORMATION)); if (!NT_SUCCESS(ZwQueryInformationThread(*ThreadHandle,ThreadBasicInformation,ThreadInfo,sizeof(THREAD_BASIC_INFORMATION),NULL))) { DPRINT("NtQueryInformationThread failed\n"); } else { DPRINT("ThreadInfo.ClientId.UniqueProcess %d\n",ThreadInfo->ClientId.UniqueProcess); } ExFreePool(ThreadInfo);