InitBootProcessor

NTSTATUS __stdcall InitBootProcessor(_LOADER_PARAMETER_BLOCK *LoaderBlock){
  char *LoadOptions; 
  CHAR v3; 
  UINT8 *v4; 
  CHAR v5; 
  __int64 v6; 
  UINT64 v7; 
  UINT8 *v8; 
  CHAR v9; 
  __int64 v10; 
  UINT64 v11; 
  __int64 v12; 
  _LIST_ENTRY *p_MemoryDescriptorListHead; 
  _LIST_ENTRY *v14; 
  _LIST_ENTRY *Flink; 
  ULONGLONG v16; 
  _LIST_ENTRY *Blink; 
  _LIST_ENTRY *v18; 
  _NLS_DATA_BLOCK *NlsData; 
  UINT16 *UnicodeCaseTableData; 
  UINT16 *OemCodePageData; 
  UINT16 *AnsiCodePageData; 
  int v23; 
  _NLSTABLEINFO *v24; 
  __int64 v25; 
  NTSTATUS v26; 
  _UNICODE_STRING *HostNtSystemRoot; 
  NTSTATUS v28; 
  int v29; 
  const INT8 *v30; 
  CHAR v31; 
  size_t v32; 
  VOID **PoolWithTag; 
  VOID **v34; 
  char *v35; 
  __int64 v36; 
  unsigned int v37; 
  _LIST_ENTRY *i; 
  char *v39; 
  unsigned int v40; 
  __int64 v41; 
  char v42; 
  NTSTATUS v43; 
  UINT64 *v44; 
  NTSTATUS Message; 
  NTSTATUS v46; 
  CHAR **v47; 
  UINT64 *v48; 
  NTSTATUS v49; 
  NTSTATUS v50; 
  NTSTATUS v51; 
  NTSTATUS v52; 
  NTSTATUS v53; 
  VOID *v54; 
  VOID **v55; 
  VOID **v56; 
  NTSTATUS result; 
  UINT64 DestinationString; 
  _STRING DestinationString_8; 
  UINT64 pcbRemaining; 
  UINT64 pullResult; 
  _IMAGE_RESOURCE_DATA_ENTRY *ResourceDataEntry; 
  PVOID Address; 
  INT64 v64; 
  INT8 *FileName[6]; 
  UINT64 ResourceIdPath[4]; 
  char pszDest[256]; 
  INT8 SourceString[64]; 

  dword_140D247B4 = -1;
  dword_140D2399C = 259;
  v64 = 0i64;
  ResourceDataEntry = 0i64;
  pcbRemaining = 0i64;
  qword_140D23968 = (__int64)&PspTimeZoneStateBuffer;
  dword_140D23998 = 1;
  byte_140D23959 = 1;
  DestinationString_8 = 0i64;
  *(_OWORD *)&FileName[1] = 0i64;
  ExpValidateLoader(LoaderBlock);
  KUSER_SHARED_DATA.BootId = LoaderBlock->Extension->BootId;
  ExpInitLicensing((INT64)&PspHostSiloGlobals);
  if( (VslGetNestedPageProtectionFlags() & 6) == 6 )
    ExpRevokeBootLoaderPagePrivileges((INT64)LoaderBlock);
  VslGetSecureSpeculationControlInformation();
  LoadOptions = LoaderBlock->LoadOptions;
  LODWORD(InitializationPhase) = 0;
  if( LoadOptions )
  {
    strupr(LoadOptions);
    strstr((UINT8 *)LoadOptions, (UINT8 *)"PERFMEM", v3);
    if( v4 )
    {
      strstr(v4, (UINT8 *)"=", v5);
      if( v6 )
      {
        v7 = (__int64)atol((const CHAR *)(v6 + 1)) << 8;
        if( LoaderBlock->Extension->BbtBuffer )
        {
          BBTPagesToReserve = v7;
        }
        else if( v7 )
        {
          BBTPagesToReserve = ExBurnMemory(LoaderBlock, v7, LoaderBBTMemory, &BBTMemoryDescriptor);
        }
      }
    }
    strstr((UINT8 *)LoadOptions, (UINT8 *)"BURNMEMORY", v5);
    if( v8 )
    {
      strstr(v8, (UINT8 *)"=", v9);
      if( v10 )
      {
        v11 = (__int64)atol((const CHAR *)(v10 + 1)) << 8;
        if( v11 )
          ExBurnMemory(LoaderBlock, v11, LoaderFirmwarePermanent, &BurnMemoryDescriptor);
      }
    }
    strstr((UINT8 *)LoadOptions, (UINT8 *)"FORCEGROUPAWARE", v9);
    if( v12 )
      KeForceGroupAwareness = 1;
  }
  p_MemoryDescriptorListHead = &LoaderBlock->MemoryDescriptorListHead;
  v14 = 0i64;
  Flink = LoaderBlock->MemoryDescriptorListHead.Flink;
  while( Flink != p_MemoryDescriptorListHead )
  {
    if( LODWORD(Flink[1].Flink) == 21 )
    {
      v16 = (ULONGLONG)Flink[2].Flink;
      pullResult = 0i64;
      if( RtlULongLongMult(v16, 0x1000ui64, &pullResult) < 0
        || RtlULongLongAdd(InitNlsTableSize, pullResult, &InitNlsTableSize) < 0 )
      {
        goto LABEL_94;
      }
    }
    Blink = Flink[1].Blink;
    v18 = Flink[2].Flink;
    if( Blink < v14 )
      KeBugCheckEx(0x31u, Flink, Blink, v18, v14);
    Flink = Flink->Flink;
    v14 = (_LIST_ENTRY *)((char *)v18 + (_QWORD)Blink);
  }
  NlsData = LoaderBlock->NlsData;
  if( NlsData )
  {
    if( NlsData->AnsiCodePageData && NlsData->OemCodePageData )
    {
      InitNlsTableBase = NlsData->AnsiCodePageData;
      InitAnsiCodePageDataOffset = 0;
      InitOemCodePageDataOffset = LODWORD(NlsData->OemCodePageData) - LODWORD(NlsData->AnsiCodePageData);
      v23 = LODWORD(NlsData->UnicodeCaseTableData) - LODWORD(NlsData->AnsiCodePageData);
    }
    else
    {
      v23 = 0;
      InitNlsTableBase = NlsData->UnicodeCaseTableData;
      InitAnsiCodePageDataOffset = 0;
      InitOemCodePageDataOffset = 0;
    }
    InitUnicodeCaseTableDataOffset = v23;
    UnicodeCaseTableData = (UINT16 *)NlsData->UnicodeCaseTableData;
    OemCodePageData = (UINT16 *)NlsData->OemCodePageData;
    AnsiCodePageData = (UINT16 *)NlsData->AnsiCodePageData;
  }
  else
  {
    UnicodeCaseTableData = 0i64;
    InitNlsTableBase = 0i64;
    OemCodePageData = 0i64;
    InitUnicodeCaseTableDataOffset = 0;
    AnsiCodePageData = 0i64;
    InitAnsiCodePageDataOffset = 0;
    InitOemCodePageDataOffset = 0;
  }
  RtlInitNlsTables(AnsiCodePageData, OemCodePageData, UnicodeCaseTableData, (_NLSTABLEINFO *)NlsData);
  RtlResetRtlTranslations(v24);
  *(&ExBootDevicesRemovedEvent + 103) = LoaderBlock->Extension->LeapSecondData;
  WheaInitializeServices();
  ((void(__fastcall *)(PVOID))off_140C008B0[0])(HalIommuDispatch);
  qword_140D577E8 = __rdtsc();
  if( !HalInitSystem((unsigned int)InitializationPhase, (INT64)LoaderBlock) )
    KeBugCheck(0x5Cu);
  qword_140D577F0 = __rdtsc();
  KeInitializeClock((unsigned int)InitializationPhase, LoaderBlock);
  PsInitializeQuotaSystem(1ui64);
  CmInitSystem0((__int64)LoaderBlock, v25);
  KvfInitFeatureStates((INT64)LoaderBlock);
  if( !PoEnergyEstimationEnabled() )
    _interlockedbittestandreset((volatile signed __int32 *)KiProcessorBlock->IdleThread, 0x15u);
  if( !KeInitSystem(0i64) )
    KeBugCheckEx(0x31u, (PVOID)0xFFFFFFFFC0000001i64, (PVOID)0xB, 0i64, 0i64);
  *(&ExBootDevicesRemovedEvent + 78) = ExComputeTickCountMultiplier();
  KUSER_SHARED_DATA.TickCountMultiplier = *(&ExBootDevicesRemovedEvent + 78);
  KUSER_SHARED_DATA.CryptoExponent = 0;
  v26 = RtlStringCbPrintfA(pszDest, 0x100ui64, (INT8 *)"C:%s");
  if( v26 < 0 )
    KeBugCheckEx(0x6Eu, (PVOID)v26, 0i64, 0i64, 0i64);
  RtlInitAnsiString(&DestinationString_8, pszDest);
  DestinationString_8.Buffer[--DestinationString_8.Length] = 0;
  HostNtSystemRoot = RtlGetHostNtSystemRoot();
  HostNtSystemRoot->Buffer = (_WORD *)(&KUSER_SHARED_DATA + 48);
  *(_DWORD *)&HostNtSystemRoot->Length = 34078720;
  v28 = RtlAnsiStringToUnicodeString(HostNtSystemRoot, &DestinationString_8, 0);
  if( v28 < 0 )
    KeBugCheckEx(0x6Eu, (PVOID)v28, (PVOID)1, 0i64, 0i64);
  ResourceIdPath[0] = 11i64;
  ResourceIdPath[1] = 1i64;
  ResourceIdPath[2] = 0i64;
  Address = 0i64;
  LODWORD(DestinationString) = 0;
  if( LdrFindResource_U((VOID *)0x140000000i64, ResourceIdPath, 3ui64, &ResourceDataEntry) >= 0
    && LdrAccessResource((PVOID)0x140000000i64, ResourceDataEntry, &Address, &DestinationString) >= 0 )
  {
    KiBugCodeMessages = Address;
  }
  CmNtGlobalFlag2 &= 1u;
  KUSER_SHARED_DATA.GlobalValidationRunlevel = CmGlobalValidationRunlevel;
  KUSER_SHARED_DATA.ProcessorFeatures[23] = 1;
  v29 = CmNtSpBuildNumber & 0xFFF;
  WORD1(CmNtCSDVersion) = 0;
  CmNtSpBuildNumber = v29;
  if( CmNtCSDReleaseType )
    LODWORD(CmNtCSDVersion) = (v29 << 16) | CmNtCSDVersion;
  if( InitTickRolloverDelayLength != 4 || InitTickRolloverDelayType != 4 )
    InitTickRolloverDelay = 0;
  if( InitTickRolloverDelay )
  {
    KeAdjustInterruptTime(10000i64 * (unsigned int)-InitTickRolloverDelay, 1u);
    KeRebaselineSystemTime();
  }
  NtGlobalFlag |= CmNtGlobalFlag;
  NtGlobalFlag2 |= CmNtGlobalFlag2;
  KUSER_SHARED_DATA.ActiveProcessorCount = 1;
  KUSER_SHARED_DATA.ActiveGroupCount = 1;
  KUSER_SHARED_DATA.UnparkedProcessorCount = 1;
  if( !ExInitSystem() )
    goto LABEL_94;
  KeNumaInitialize();
  VerifierInitSystem(LoaderBlock);
  InitializeDynamicPartitioningPolicy(v30);
  EtwBootPerfData = KeQueryPerformanceCounter(0i64);
  if( !MmInitSystem(0i64, LoaderBlock) )
    goto LABEL_94;
  qword_140D57798 = KeQueryPerformanceCounter(0i64);
  KiHwPolicyDriverImageBase = 0i64;
  HalInitializeBios(0i64, (INT64)LoaderBlock);
  InbvDriverInitialize(0i64, LoaderBlock, 0i64);
  if( KiBugCodeMessages )
  {
    v32 = DestinationString;
    PoolWithTag = ExAllocatePoolWithTag(0x200ui64, (unsigned int)DestinationString, 1665296715i64);
    v34 = PoolWithTag;
    if( !PoolWithTag )
      KeBugCheck(0x7Du);
    memmove(PoolWithTag, KiBugCodeMessages, v32);
    KiBugCodeMessages = v34;
  }
  if( LoaderBlock->OsLoaderSecurityVersion != 1 )
  {
    v35 = LoaderBlock->LoadOptions;
    if( v35 )
    {
      strstr((UINT8 *)v35, (UINT8 *)"DEBUG", v31);
      if( v36 )
      {
        dword_140C508EC = 0;
        KeBugCheckEx(0x196u, (PVOID)LoaderBlock->OsLoaderSecurityVersion, (PVOID)1, 0i64, 0i64);
      }
    }
  }
  v37 = 0;
  for( i = LoaderBlock->LoadOrderListHead.Flink; i != &LoaderBlock->LoadOrderListHead; ++v37 )
  {
    if( v37 >= 3 )
    {
      v39 = (char *)i[5].Flink;
      if( *(_WORD *)v39 == 92 )
      {
        v40 = LOWORD(i[4].Blink) >> 1;
        if( (unsigned __int64)v40 + 1 <= 0x100 )
        {
          v41 = 0i64;
          do
          {
            v42 = *v39;
            v39 += 2;
            pszDest[v41] = v42;
            v41 = (unsigned int)(v41 + 1);
          }
          while( (unsigned int)v41 < v40 );
          if( (unsigned int)v41 >= 0x100ui64 )
            _report_rangecheckfailure();
          pszDest[v41] = 0;
LABEL_64:
          RtlInitAnsiString((PANSI_STRING)&FileName[1], pszDest);
          DbgLoadImageSymbols((_STRING *)&FileName[1], i[3].Flink, 0xFFFFFFFF);
        }
      }
      else if( ((unsigned __int64)LOWORD(i[5].Blink) >> 1) + ((unsigned __int64)HostNtSystemRoot->Length >> 1) + 17 <= 0x100 )
      {
        v43 = RtlStringCbPrintfA(pszDest, 0x100ui64, (INT8 *)"%ws\\System32\\Drivers\\%wZ");
        if( v43 < 0 )
          KeBugCheckEx(0x31u, (PVOID)v43, (PVOID)3, 0i64, 0i64);
        goto LABEL_64;
      }
    }
    i = i->Flink;
  }
  if( BYTE1(KdDebuggerEnabled) )
    DbgBreakPointWithStatus(1u);
  ExpInitializeBootEnvironment(LoaderBlock);
  HvlPhase1Initialize();
  if( LoaderBlock->Extension->Size >= 0xE38 )
    HeadlessInit(LoaderBlock);
  BootApplicationPersistentDataInitialize(LoaderBlock);
  KUSER_SHARED_DATA.Reserved1 = 2147418111;
  KUSER_SHARED_DATA.Reserved3 = 0x80000000;
  if( (_DWORD)CmNtCSDVersion )
  {
    Message = RtlFindMessage((VOID *)0x140000000i64, 0xBui64, 0i64, 0x40000087ui64, (UINT16 **)&v64);
    if( Message < 0 )
      KeBugCheckEx(0x31u, (PVOID)Message, (PVOID)4, 0i64, 0i64);
    RtlInitAnsiString(&DestinationString_8, (PCSZ)(v64 + 4));
    DestinationString_8.Length -= 2;
    v46 = RtlStringCbPrintfA(pszDest, 0x100ui64, (INT8 *)"%Z %u%c");
    if( v46 < 0 )
      KeBugCheckEx(0x31u, (PVOID)v46, (PVOID)5, 0i64, 0i64);
    if( (CmNtCSDVersion & 0xFFFF0000) != 0 )
    {
      FileName[0] = 0i64;
      v49 = RtlStringCbCatExA(pszDest, v47, v48);
      if( v49 < 0 )
        KeBugCheckEx(0x31u, (PVOID)v49, (PVOID)6, 0i64, 0i64);
      v50 = RtlStringCbPrintfA(FileName[0], pcbRemaining, (INT8 *)"v.%u");
      if( v50 < 0 )
        KeBugCheckEx(0x31u, (PVOID)v50, (PVOID)7, 0i64, 0i64);
    }
  }
  else
  {
    v51 = RtlStringCbCopyExA(pszDest, v44);
    if( v51 < 0 )
      KeBugCheckEx(0x31u, (PVOID)v51, (PVOID)8, 0i64, 0i64);
    CmCSDVersionString.MaximumLength = 256 - pcbRemaining;
  }
  RtlInitAnsiString(&DestinationString_8, pszDest);
  v52 = RtlAnsiStringToUnicodeString(&CmCSDVersionString, &DestinationString_8, 1u);
  if( v52 < 0 )
    KeBugCheckEx(0x31u, (PVOID)v52, (PVOID)9, 0i64, 0i64);
  v53 = RtlStringCbPrintfA(SourceString, 0x40ui64, (INT8 *)"%u.%u");
  if( v53 < 0 )
    KeBugCheckEx(0x31u, (PVOID)v53, (PVOID)0xA, 0i64, 0i64);
  if( !RtlCreateUnicodeStringFromAsciiz((INT64)&CmVersionString, (INT64)SourceString) )
LABEL_94:
    KeBugCheck(0x31u);
  if( (NtGlobalFlag & 0x2000) != 0 )
  {
    v55 = ExAllocatePoolWithTag(0x200ui64, 0x800000ui64, 1667331155i64);
    v56 = v55;
    if( v55 )
    {
      FileName[3] = (INT8 *)v55;
      FileName[4] = (INT8 *)0x800000;
      FileName[5] = (INT8 *)0x800000;
      if( RtlControlStackTraceDataBase(v54) < 0 )
        ExFreePoolWithTag(v56, 0x63617453u);
    }
  }
  if( (NtGlobalFlag & 0x800000) != 0 )
    RtlInitializeExceptionLog((UINT64)v54);
  ExInitializeHandleTablePackage();
  if( !ObInitSystem() )
    KeBugCheck(0x5Eu);
  if( !SeInitSystem() )
    KeBugCheck(0x5Fu);
  if( !PsInitSystem(0i64, LoaderBlock) || DbgkInitialize() < 0 )
    KeBugCheck(0x60u);
  if( !PpInitSystem() )
    KeBugCheck(0x8Fu);
  KUSER_SHARED_DATA.NtMajorVersion = 10;
  KUSER_SHARED_DATA.NtMinorVersion = 0;
  KUSER_SHARED_DATA.NtBuildNumber = 19041;
  KUSER_SHARED_DATA.NativeProcessorArchitecture = KeProcessorArchitecture;
  KUSER_SHARED_DATA.ImageNumberLow = -31132;
  KUSER_SHARED_DATA.ImageNumberHigh = -31132;
  result = 0;
  KUSER_SHARED_DATA.LangGenerationCount = 0;
  return result;
}

Referenced by:

KiInitializeKernel