Update thread initialization code
This commit is contained in:
@@ -147,6 +147,7 @@ KE::KThread::InitializeThread(IN PKPROCESS Process,
|
|||||||
/* Initialize thread dispatcher header */
|
/* Initialize thread dispatcher header */
|
||||||
Thread->Header.SignalState = 0;
|
Thread->Header.SignalState = 0;
|
||||||
Thread->Header.Size = sizeof(KTHREAD) / sizeof(LONG);
|
Thread->Header.Size = sizeof(KTHREAD) / sizeof(LONG);
|
||||||
|
Thread->Header.DebugActive = FALSE;
|
||||||
Thread->Header.Type = ThreadObject;
|
Thread->Header.Type = ThreadObject;
|
||||||
|
|
||||||
/* Initialize thread wait list */
|
/* Initialize thread wait list */
|
||||||
@@ -170,15 +171,18 @@ KE::KThread::InitializeThread(IN PKPROCESS Process,
|
|||||||
/* Set priority adjustment reason */
|
/* Set priority adjustment reason */
|
||||||
Thread->AdjustReason = AdjustNone;
|
Thread->AdjustReason = AdjustNone;
|
||||||
|
|
||||||
|
/* Set the thread service table */
|
||||||
|
Thread->ServiceTable = NULLPTR;
|
||||||
|
|
||||||
/* Initialize thread lock */
|
/* Initialize thread lock */
|
||||||
KE::SpinLock::InitializeSpinLock(&Thread->ThreadLock);
|
KE::SpinLock::InitializeSpinLock(&Thread->ThreadLock);
|
||||||
|
|
||||||
/* Initialize thread APC */
|
/* Initialize thread APC */
|
||||||
Thread->ApcStatePointer[0] = &Thread->ApcState;
|
|
||||||
Thread->ApcStatePointer[1] = &Thread->SavedApcState;
|
|
||||||
Thread->ApcQueueable = TRUE;
|
Thread->ApcQueueable = TRUE;
|
||||||
Thread->ApcState.Process = Process;
|
Thread->ApcState.Process = Process;
|
||||||
Thread->Process = Process;
|
Thread->ApcStateIndex = OriginalApcEnvironment;
|
||||||
|
Thread->ApcStatePointer[OriginalApcEnvironment] = &Thread->ApcState;
|
||||||
|
Thread->ApcStatePointer[AttachedApcEnvironment] = &Thread->SavedApcState;
|
||||||
|
|
||||||
/* Initialize APC list heads */
|
/* Initialize APC list heads */
|
||||||
RTL::LinkedList::InitializeListHead(&Thread->ApcState.ApcListHead[KernelMode]);
|
RTL::LinkedList::InitializeListHead(&Thread->ApcState.ApcListHead[KernelMode]);
|
||||||
@@ -203,8 +207,9 @@ KE::KThread::InitializeThread(IN PKPROCESS Process,
|
|||||||
TimerWaitBlock->WaitListEntry.Flink = &(&Thread->Timer)->Header.WaitListHead;
|
TimerWaitBlock->WaitListEntry.Flink = &(&Thread->Timer)->Header.WaitListHead;
|
||||||
TimerWaitBlock->WaitListEntry.Blink = &(&Thread->Timer)->Header.WaitListHead;
|
TimerWaitBlock->WaitListEntry.Blink = &(&Thread->Timer)->Header.WaitListHead;
|
||||||
|
|
||||||
/* Initialize Thread Environment Block*/
|
/* Initialize Thread Environment Block and set owner process */
|
||||||
Thread->EnvironmentBlock = (PTHREAD_ENVIRONMENT_BLOCK)EnvironmentBlock;
|
Thread->EnvironmentBlock = (PTHREAD_ENVIRONMENT_BLOCK)EnvironmentBlock;
|
||||||
|
Thread->Process = Process;
|
||||||
|
|
||||||
/* Make sure there is a valid stack available */
|
/* Make sure there is a valid stack available */
|
||||||
if(!Stack)
|
if(!Stack)
|
||||||
@@ -221,6 +226,7 @@ KE::KThread::InitializeThread(IN PKPROCESS Process,
|
|||||||
Allocation = TRUE;
|
Allocation = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Setup thread stack */
|
||||||
Thread->InitialStack = Stack;
|
Thread->InitialStack = Stack;
|
||||||
Thread->StackBase = Stack;
|
Thread->StackBase = Stack;
|
||||||
Thread->StackLimit = (PVOID)((ULONG_PTR)Stack - KERNEL_STACK_SIZE);
|
Thread->StackLimit = (PVOID)((ULONG_PTR)Stack - KERNEL_STACK_SIZE);
|
||||||
|
|||||||
Reference in New Issue
Block a user