KiCompleteKernelInit
VOID __stdcall KiCompleteKernelInit(_KPRCB *Prcb, _ETHREAD *Thread, UINT64 Number){
int v3;
UINT8 v6;
bool v7;
UINT64 SpinCount;
v3 = Number;
if( !(_DWORD)Number )
{
Prcb->MaximumDpcQueueDepth = KiMaximumDpcQueueDepth;
Prcb->MinimumDpcRate = KiMinimumDpcRate;
Prcb->AdjustDpcThreshold = KiAdjustDpcThreshold;
}
KeGetCurrentIrql();
__writecr8(2ui64);
_enable();
KeAttachProcess(&PsInitialSystemProcess->Pcb);
if( !v3 )
{
qword_140C31C98 = 0i64;
qword_140C31C90 = (__int64)&qword_140C31C88;
qword_140C31C88 = (__int64)&qword_140C31C88;
KeInitializeTimer2((INT64)&KiForegroundState, (INT64)KiForegroundTimerCallback, 0i64, 8i64);
KeInitializeDpc(&Dpc, (PKDEFERRED_ROUTINE)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 *)&Prcb->ParentNode->NonParkedSet, Prcb->GroupIndex);
_interlockedbittestandset64((volatile signed __int32 *)&Prcb->ParentNode->NonIsrTargetedSet, Prcb->GroupIndex);
LODWORD(SpinCount) = 0;
while( _interlockedbittestandset64((volatile signed __int32 *)&Prcb->PrcbLock, 0i64) )
{
do
KeYieldProcessorEx(&SpinCount);
while( Prcb->PrcbLock );
}
v7 = Prcb->NextThread == 0i64;
Prcb->IdleState = 1;
if( v7 )
{
v6 = 1;
KiSetProcessorIdle(Prcb, 1ui64, 1ui64);
}
KiUpdateThreadPriority(Prcb, &Thread->Tcb, 0i64, v6);
_InterlockedAnd64((volatile signed __int64 *)&Prcb->PrcbLock, 0i64);
KiCreateCpuSetForProcessor(Prcb);
}Referenced by:
KiInitializeKernel