MiReloadBootLoadedDrivers

VOID __stdcall MiReloadBootLoadedDrivers(_LOADER_PARAMETER_BLOCK *LoaderBlock, _SUBSECTION *a2, UINT64 a3, INT64 a4){
  INT8 v5; 
  INT64 v6; 
  _LIST_ENTRY *p_LoadOrderListHead; 
  _KLDR_DATA_TABLE_ENTRY *i; 
  _LIST_ENTRY *k; 
  _LIST_ENTRY *Flink; 
  _LIST_ENTRY *v11; 
  unsigned __int64 v12; 
  __int64 v13; 
  __int64 v14; 
  INT64 v15; 
  NTSTATUS v16; 
  _LIST_ENTRY *j; 
  INT64 a6; 
  INT64 v19; 
  INT64 v20[14]; 
  INT64 v21[24]; 

  memset(v21, 0i64, 0xB8u);
  v21[3] = 0i64;
  LODWORD(v21[1]) = 20;
  MmAcquireLoadLock(v6, v5);
  p_LoadOrderListHead = &LoaderBlock->LoadOrderListHead;
  for( i = (_KLDR_DATA_TABLE_ENTRY *)LoaderBlock->LoadOrderListHead.Flink;
        i != (_KLDR_DATA_TABLE_ENTRY *)p_LoadOrderListHead;
        i = (_KLDR_DATA_TABLE_ENTRY *)i->InLoadOrderLinks.Flink )
  {
    if( (void *)PsNtosImageBase != i->DllBase )
      MiProcessLoadConfigForDriver(i, 0i64);
    MiHandleBootImage((INT64)LoaderBlock, (INT64)i, (INT64)v21);
  }
  MiFlushTbList((_MI_TB_FLUSH_LIST *)v21);
  if( (KiSpeculationFeatures & 0x2000000) != 0 )
  {
    Flink = p_LoadOrderListHead->Flink;
    if( p_LoadOrderListHead->Flink != p_LoadOrderListHead )
    {
      do
      {
        v11 = Flink[3].Flink;
        v12 = ((unsigned __int64)LODWORD(Flink[4].Flink) + 4095) >> 12;
        LODWORD(v13) = RtlImageNtHeader((UINT64)v11);
        v14 = v13;
        MiLogRetpolineImageLoadEvents(Flink);
        if( (KiSpeculationFeatures & 0x2000000) != 0
          && v11 != (_LIST_ENTRY *)PsNtosImageBase
          && v11 != PsHalImageBase
          && (*(_BYTE *)(v14 + 22) & 1) == 0
          && *(_DWORD *)(v14 + 132) > 5u )
        {
          if( !MI_IS_PHYSICAL_ADDRESS(Flink[3].Flink) )
          {
            LODWORD(v15) = MiMapRetpolineStubs((UINT64)v11, v12);
            if( (MiFlags & 0x10000) != 0 )
            {
              memset(v20, 0i64, 0x68u);
              v20[1] = (INT64)v11;
              LOBYTE(v20[2]) = 1;
              v16 = VslpEnterIumSecureMode(2u, 221, 0i64, (INT64)v20);
            }
            else
            {
              LODWORD(v19) = 0;
              LODWORD(a6) = 1;
              v16 = RtlPerformRetpolineRelocationsOnImageEx(
                      v11,
                      (INT64)v11,
                      LODWORD(Flink[4].Flink),
                      v15,
                      qword_140C4C9A8,
                      a6,
                      0i64,
                      0i64,
                      v19);
            }
            if( (int)(v16 + 0x80000000) >= 0 && v16 != -1073741637 )
              KeBugCheckEx(0x1Au, (PVOID)0x1080, Flink, Flink[3].Flink, (PVOID)v16);
          }
          if( RtlIsImageFullyRetpolined(Flink[3].Flink) )
            MiMarkRetpolineBits((INT64)Flink[3].Flink);
        }
        Flink = Flink->Flink;
      }
      while( Flink != p_LoadOrderListHead );
      for( j = LoaderBlock->LoadOrderListHead.Flink; j != p_LoadOrderListHead; j = j->Flink )
      {
        if( ((__int64)j[6].Blink & 0x1000000) == 0 && !RtlIsImageFullyRetpolined(j[3].Flink) )
          MiMarkRetpolineBits((INT64)j[3].Flink);
      }
    }
  }
  MiApplyImportOptimizationToBootDrivers((INT64)LoaderBlock);
  if( (MiFlags & 0x8000) != 0 )
  {
    for( k = p_LoadOrderListHead->Flink; k != p_LoadOrderListHead; k = k->Flink )
      VslReserveProtectedPages(0i64, (INT64)k[3].Flink, 0i64, 2ui64);
  }
  MmReleaseLoadLock((_ETHREAD *)KeGetCurrentThread());
}

Referenced by:

MiInitializeDriverImages