KiCompleteKernelInit
void __fastcall KiCompleteKernelInit(__int64 a1, __int64 a2, int a3){
UINT8 v6;
bool v7;
UINT64 SpinCount;
if( !a3 )
{
*(_DWORD *)(a1 + 12568) = KiMaximumDpcQueueDepth;
*(_DWORD *)(a1 + 12576) = *(_DWORD *)KiMinimumDpcRate;
*(_DWORD *)(a1 + 32404) = KiAdjustDpcThreshold;
}
KeGetCurrentIrql();
__writecr8(2ui64);
_enable();
KeAttachProcess(PsInitialSystemProcess);
if( !a3 )
{
StackSizes = 0i64;
qword_140C31C90 = (__int64)&qword_140C31C88;
qword_140C31C88 = (__int64)&qword_140C31C88;
KeInitializeTimer2((INT64)&KiForegroundState, (INT64)KiForegroundTimerCallback, 0i64, 8i64);
KeInitializeDpc((PRKDPC)&stru_140C31C08, KiProcessPendingForegroundBoosts, 0i64);
KeInitializeDpc(&stru_140C31C48, KiTriggerForegroundBoostDpc, 0i64);
KeInitializeDpc(&KiUpdateVpThreadPriorityDpc, KiUpdateVpBackingThreadPriorityDpcRoutine, 0i64);
KiUpdateVpThreadPriorityLock = 0i64;
qword_140C31CE8 = (__int64)&KiUpdateVpThreadPriorityListHead;
KiUpdateVpThreadPriorityListHead = (__int64)&KiUpdateVpThreadPriorityListHead;
KiUpdateVpThreadPriorityDpc.Importance = 2;
}
v6 = 0;
_interlockedbittestandset64(
(volatile signed __int32 *)(*(_QWORD *)(a1 + 192) + 80i64),
*(unsigned __int8 *)(a1 + 209));
_interlockedbittestandset64(
(volatile signed __int32 *)(*(_QWORD *)(a1 + 192) + 96i64),
*(unsigned __int8 *)(a1 + 209));
LODWORD(SpinCount) = 0;
while( _interlockedbittestandset64((volatile signed __int32 *)(a1 + 48), 0i64) )
{
do
KeYieldProcessorEx(&SpinCount);
while( *(_QWORD *)(a1 + 48) );
}
v7 = *(_QWORD *)(a1 + 16) == 0i64;
*(_BYTE *)(a1 + 35) = 1;
if( v7 )
{
v6 = 1;
KiSetProcessorIdle((_KPRCB *)a1, 1ui64, 1ui64);
}
KiUpdateThreadPriority((_KPRCB *)a1, (_KTHREAD *)a2, 0i64, v6);
_InterlockedAnd64((volatile signed __int64 *)(a1 + 48), 0i64);
KiCreateCpuSetForProcessor((_KPRCB *)a1);
}Referenced by:
KiInitializeKernel