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