KiSystemStartup

VOID __stdcall __noreturn KiSystemStartup(VOID *LoaderBlock){
  unsigned int *Prcb; 
  unsigned __int64 v3; 
  unsigned __int64 v4; 
  unsigned __int64 v5; 
  unsigned __int64 v6; 
  __int64 v7; 
  unsigned __int64 v9; 
  void *v10; 
  _LOADER_PARAMETER_BLOCK *v11; 
  _EPROCESS *v12; 
  _ETHREAD *v13; 
  VOID *v14; 
  unsigned __int64 v15; 
  __int64 v16; 
  bool v17; 

  KeLoaderBlock_0 = (_LOADER_PARAMETER_BLOCK *)LoaderBlock;
  if( !*(_DWORD *)(*((_QWORD *)LoaderBlock + 17) + 36i64) )
    KdInitSystem(0xFFFFFFFFui64, KeLoaderBlock_0);
  Prcb = (unsigned int *)KeLoaderBlock_0->Prcb;
  _RDX = Prcb - 96;
  *((_QWORD *)_RDX + 3) = _RDX;
  *((_QWORD *)_RDX + 4) = Prcb;
  v3 = __readcr0();
  *((_QWORD *)Prcb + 32) = v3;
  v4 = __readcr2();
  *((_QWORD *)Prcb + 33) = v4;
  v5 = __readcr3();
  *((_QWORD *)Prcb + 34) = v5;
  v6 = __readcr4();
  *((_QWORD *)Prcb + 35) = v6;
  __sgdt((char *)Prcb + 342);
  v7 = *((_QWORD *)Prcb + 43);
  *(_QWORD *)_RDX = v7;
  __sidt((char *)Prcb + 358);
  *((_QWORD *)_RDX + 7) = *((_QWORD *)Prcb + 45);
  __asm
  {
    str     word ptr [rdx+2F0h]
    sldt    word ptr [rdx+2F2h]
  }
  *Prcb = 8064;
  _mm_setcsr(*Prcb);
  if( !Prcb[9] )
    *(_WORD *)(v7 + 80) = 15360;
  if( !VslVsmEnabled )
  {
    _AX = 0;
    __asm { lldt    ax }
  }
  *MK_FP(43, _RDX + 2) = *MK_FP(43, v7 + 66);
  *MK_FP(43, (char *)_RDX + 10) = *MK_FP(43, v7 + 68);
  *MK_FP(43, (char *)_RDX + 11) = *MK_FP(43, v7 + 71);
  *MK_FP(43, _RDX + 3) = *MK_FP(43, v7 + 72);
  v9 = (unsigned __int64)_RDX >> 32;
  __writemsr(0xC0000101, __PAIR64__(v9, (int)Prcb - 384));
  __writemsr(0xC0000102, __PAIR64__(v9, (int)Prcb - 384));
  if( !*MK_FP(43, Prcb + 9) )
  {
    _guard_dispatch_icall_fptr = (__int64(__fastcall *)())&guard_dispatch_icall;
    _guard_check_icall_fptr[0] = (__int64(__fastcall *)())guard_check_icall;
  }
  KiInitializeBootStructures(KeLoaderBlock_0);
  if( !*MK_FP(43, *MK_FP(43, &KeLoaderBlock_0->Prcb) + 36i64) )
    KdInitSystem(0i64, KeLoaderBlock_0);
  KiInitializeXSave(KeLoaderBlock_0, (unsigned int)*MK_FP(43, *MK_FP(43, &KeLoaderBlock_0->Prcb) + 36i64));
  __writecr8(0xFui64);
  v10 = alloca((unsigned int)KiXSaveAreaLength);
  v11 = KeLoaderBlock_0;
  v12 = (_EPROCESS *)*MK_FP(43, &KeLoaderBlock_0->Process);
  v13 = (_ETHREAD *)*MK_FP(43, &KeLoaderBlock_0->Thread);
  if( (KiKvaShadow & 1) != 0 )
  {
    v14 = (VOID *)*MK_FP(43, *MK_FP(43, &KeGetPcr()->IdtBase) + 4216i64);
    __writegsqword(0x9008u, (unsigned __int64)v14);
  }
  else
  {
    v14 = (VOID *)*MK_FP(43, *MK_FP(43, &KeGetPcr()->TssBase) + 4i64);
  }
  __writegsqword(0x1A8u, (unsigned __int64)v14);
  KiInitializeKernel(
    &v12->Pcb,
    &v13->Tcb,
    v14,
    (_KPRCB *)*MK_FP(43, &v11->Prcb),
    *MK_FP(43, *MK_FP(43, &v11->Prcb) + 36i64),
    v11);
  if( !*MK_FP(43, &KeGetPcr()->Prcb.Number) )
  {
    v15 = __rdtsc();
    v16 = __ROL8__(*(&WheapDeferredInternalLogsEventLock + 88) ^ __ROR8__(v15, 49) ^ v15, 16);
    LOWORD(v16) = 0;
    *(_QWORD *)&_security_cookie = __ROR8__(v16, 16);
    _security_cookie_complement = (PVOID)~*(_QWORD *)&_security_cookie;
  }
  *MK_FP(43, &KeGetCurrentThread()->WaitBlockFill11[70]) = 2;
  do
  {
    v17 = KiBarrierWait == 0;
    _mm_pause();
  }
  while( !v17 );
  KiIdleLoop();
}

Referenced by:

No references.