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