Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Нет. Процесс убивается в ядре 03.05.06 17:59 Число просмотров: 2983
Автор: amirul <Serge> Статус: The Elderman
|
> BTW у меня есть сильное подозрение что когда у процесса > заканчиваюцца потоки умирает он тоже не по собственному > желанию а по приказу csrss.exe
DECLSPEC_NORETURN
VOID
PspExitThread(
IN NTSTATUS ExitStatus
)
{
// [skipped]
Thread = PsGetCurrentThread();
Process = THREAD_TO_PROCESS(Thread);
// [skipped]
if ( (Process->ThreadListHead.Flink == Process->ThreadListHead.Blink)
&& (Process->ThreadListHead.Flink == &Thread->ThreadListEntry) ) {
LastThread = TRUE;
if ( ExitStatus == STATUS_THREAD_IS_TERMINATING ) {
if ( Process->ExitStatus == STATUS_PENDING ) {
Process->ExitStatus = Process->LastThreadExitStatus;
}
} else {
Process->ExitStatus = ExitStatus;
}
DbgkExitProcess(ExitStatus);
}
// [skipped]
if ( LastThread && Process->Win32Process ) {
(PspW32ProcessCallout)(Process,FALSE); // Вот тут он разрегистрируется в csrss-е
}
// [skipped]
//
// If this is the last thread in the process, then clean the address space
//
if ( LastThread ) {
if (!(ExChangeHandle(PspCidTable,Process->UniqueProcessId, PspMarkCidInvalid, PSP_INVALID_ID))) {
KeBugCheck(CID_HANDLE_DELETION);
}
KeQuerySystemTime(&Process->ExitTime);
PspExitProcess(TRUE,Process);
}
// [skipped]
}
---
Такие дела.
Да, все функции убивания потока заканчиваются в этой самой PspExitThread. Если TerminateThread вызван для текущего потока, то напрямую, а если для другого - через special APC
|
|
|