KiInitializeIdleThread
VOID __fastcall KiInitializeIdleThread(_ETHREAD *Thread, VOID *KernelStack, _EPROCESS *Process, _KPRCB *Prcb){
__int16 v7;
__int64 v8;
int v9;
_QWORD *v10;
_QWORD *v11;
*((_DWORD *)Thread + 20) = 0;
KeInitThread(Thread, KernelStack, KiIdleLoop);
*((_DWORD *)Thread + 29) &= ~0x4000u;
KeStartThread((_KTHREAD *)Thread, 0i64, 0i64);
*((_DWORD *)Thread + 134) = *((_DWORD *)Prcb + 9);
*((_BYTE *)Thread + 388) = 2;
v7 = *((unsigned __int8 *)Prcb + 208);
*((_WORD *)Thread + 280) = v7;
v8 = *((_QWORD *)Prcb + 25);
*((_QWORD *)Thread + 69) = v8;
v9 = *((_DWORD *)Prcb + 9);
*((_DWORD *)Thread + 29) |= 8u;
*((_DWORD *)Thread + 49) = v9;
*((_DWORD *)Thread + 147) = v9;
*((_WORD *)Thread + 292) = v7;
*((_QWORD *)Thread + 72) = v8;
*((_BYTE *)Thread + 113) = 1;
*((_BYTE *)Thread + 390) = 2;
*((_QWORD *)Thread + 138) = KiIdleLoop;
*((_QWORD *)Thread + 154) = KiIdleLoop;
**((_BYTE **)Prcb + 7) = 127;
*((_BYTE *)Thread + 195) = 127;
if( *((_DWORD *)Prcb + 9) )
{
if( KiSchedulerAssistThreadFlagEnabled )
_interlockedbittestandset((volatile signed __int32 *)Thread, 0x16u);
}
else
{
qword_140D23FE8 = (__int64)&qword_140D23FE0;
qword_140D23FE0 = (__int64)&qword_140D23FE0;
_InterlockedOr(&dword_140D23E60, 0x8000u);
_InterlockedOr(&dword_140D2427C, 0x400000u);
}
*((_QWORD *)Thread + 173) = (char *)Thread + 1376;
*((_QWORD *)Thread + 172) = (char *)Thread + 1376;
*((_QWORD *)Thread + 175) = (char *)Thread + 1392;
*((_QWORD *)Thread + 174) = (char *)Thread + 1392;
*((_QWORD *)Thread + 176) = 0i64;
v10 = (_QWORD *)((char *)Thread + 1256);
v11 = (_QWORD *)qword_140D23FE8;
if( *(__int64 **)qword_140D23FE8 != &qword_140D23FE0 )
__fastfail(3u);
*v10 = &qword_140D23FE0;
v10[1] = v11;
*v11 = v10;
qword_140D23FE8 = (__int64)v10;
_InterlockedOr64(
(volatile signed __int64 *)Process
+ ((unsigned __int64)(unsigned int)KiProcessorIndexToNumberMappingTable[*((unsigned int *)Prcb + 9)] >> 6)
+ 47,
1i64 << (KiProcessorIndexToNumberMappingTable[*((unsigned int *)Prcb + 9)] & 0x3F));
}Referenced by:
KiInitializeKernel