PspInitPhase2

NTSTATUS __fastcall PspInitPhase2(_LOADER_PARAMETER_BLOCK *LoaderBlock){
  PEPROCESS v1; 
  _LARGE_INTEGER v2; 
  unsigned __int64 UnbiasedInterruptTime; 
  _QWORD *v4; 
  unsigned __int8 v5; 
  unsigned __int8 v6; 
  NTSTATUS result; 
  UINT64 Seed; 

  TraceLoggingRegisterEx_EtwRegister_EtwSetInformation((char *)&stru_140C00F40 + 2928);
  v1 = PsInitialSystemProcess;
  v2.anonymous_0.LowPart = RtlGetSystemTimePrecise();
  v1->CreateTime = v2;
  PsInitialSystemProcess->CreateInterruptTime = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
  UnbiasedInterruptTime = KiQueryUnbiasedInterruptTime(1u);
  v4 = *(_QWORD **)&PsIdleProcess;
  PsInitialSystemProcess->CreateUnbiasedInterruptTime = UnbiasedInterruptTime;
  v4[141] = PsInitialSystemProcess->CreateTime.QuadPart;
  v4[288] = PsInitialSystemProcess->CreateInterruptTime;
  v4[289] = PsInitialSystemProcess->CreateUnbiasedInterruptTime;
  RtlGetSystemTimePrecise();
  PspWorkOnBehalfEncodingKey = (unsigned __int64)(unsigned int)RtlRandom(&Seed) << 32;
  PspWorkOnBehalfEncodingKey = (unsigned int)RtlRandom(&Seed) | (unsigned __int64)PspWorkOnBehalfEncodingKey;
  if( PspSehValidationPolicy )
  {
    if( PspSehValidationPolicy == 2 )
      v5 = KUSER_SHARED_DATA.MitigationPolicies & 0xF3 | 8;
    else
      v5 = KUSER_SHARED_DATA.MitigationPolicies & 0xF3 | 4;
  }
  else
  {
    v5 = KUSER_SHARED_DATA.MitigationPolicies & 0xF3;
  }
  KUSER_SHARED_DATA.MitigationPolicies = v5;
  switch( PspCurDirDevicesSkippedForDlls )
  {
    case 1:
      v6 = v5 & 0xCF | 0x10;
      break;
    case 2:
      v6 = v5 & 0xCF | 0x20;
      break;
    case -1:
      v6 = v5 | 0x30;
      break;
    default:
      v6 = v5 & 0xCF;
      break;
  }
  KUSER_SHARED_DATA.MitigationPolicies = v6;
  PspInitializeSystemDlls();
  result = PspInitializeProtectedProcessParameters((INT64)&PspHostSiloGlobals);
  LOBYTE(result) = result >= 0;
  return result;
}

Referenced by:

PsInitSystem