MiReloadBootLoadedDrivers

VOID __fastcall MiReloadBootLoadedDrivers(_LOADER_PARAMETER_BLOCK *LoaderBlock){
  ULONG_PTR *v2; 
  INT64 i; 
  ULONG_PTR *k; 
  ULONG_PTR v5; 
  PVOID v6; 
  unsigned __int64 v7; 
  IMAGE_NT_HEADERS *v8; 
  INT64 v9; 
  int v10; 
  ULONG_PTR j; 
  INT64 a6; 
  INT64 v13; 
  INT64 result[2]; 
  char v15; 
  INT64 v16; 
  int v17; 
  __int64 v18; 
  memset((INT64)&v16, 0i64);
  v18 = 0i64;
  v17 = 20;
  MmAcquireLoadLock();
  v2 = (ULONG_PTR *)((char *)LoaderBlock + 16);
  for( i = *((_QWORD *)LoaderBlock + 2); (ULONG_PTR *)i != v2; i = *(_QWORD *)i )
  {
    if( PsNtosImageBase != *(_QWORD *)(i + 48) )
      MiProcessLoadConfigForDriver((_KLDR_DATA_TABLE_ENTRY *)i, 0i64);
    MiHandleBootImage((INT64)LoaderBlock, i, (INT64)&v16);
  }
  MiFlushTbList((__int64)&v16);
  if( (KiSpeculationFeatures & 0x2000000) != 0 )
  {
    v5 = *v2;
    if( (ULONG_PTR *)*v2 != v2 )
    {
      do
      {
        v6 = *(PVOID *)(v5 + 48);
        v7 = ((unsigned __int64)*(unsigned int *)(v5 + 64) + 4095) >> 12;
        v8 = RtlImageNtHeader(v6);
        MiLogRetpolineImageLoadEvents(v5);
        if( (KiSpeculationFeatures & 0x2000000) != 0
          && v6 != (PVOID)PsNtosImageBase
          && v6 != PsHalImageBase
          && (v8->FileHeader.Characteristics & 1) == 0
          && v8->OptionalHeader.NumberOfRvaAndSizes > 5 )
        {
          if( !(unsigned int)MI_IS_PHYSICAL_ADDRESS(*(PVOID *)(v5 + 48)) )
          {
            v9 = MiMapRetpolineStubs((UINT64)v6, v7);
            if( (MiFlags & 0x10000) != 0 )
            {
              memset((INT64)result, 0i64);
              result[1] = (INT64)v6;
              v15 = 1;
              v10 = VslpEnterIumSecureMode(2u, 221, 0i64, (INT64)result);
            }
            else
            {
              LODWORD(v13) = 0;
              LODWORD(a6) = 1;
              v10 = RtlPerformRetpolineRelocationsOnImageEx(
                      v6,
                      (INT64)v6,
                      *(unsigned int *)(v5 + 64),
                      v9,
                      (INT64)Base,
                      a6,
                      0i64,
                      0i64,
                      v13);
            }
            if( (int)(v10 + 0x80000000) >= 0 && v10 != -1073741637 )
              KeBugCheckEx(0x1Au, 0x1080ui64, v5, *(_QWORD *)(v5 + 48), v10);
          }
          if( (unsigned int)RtlIsImageFullyRetpolined(*(VOID **)(v5 + 48)) )
            MiMarkRetpolineBits(*(_QWORD *)(v5 + 48));
        }
        v5 = *(_QWORD *)v5;
      }
      while( (ULONG_PTR *)v5 != v2 );
      for( j = *((_QWORD *)LoaderBlock + 2); (ULONG_PTR *)j != v2; j = *(_QWORD *)j )
      {
        if( (*(_DWORD *)(j + 104) & 0x1000000) == 0 && !(unsigned int)RtlIsImageFullyRetpolined(*(VOID **)(j + 48)) )
          MiMarkRetpolineBits(*(_QWORD *)(j + 48));
      }
    }
  }
  MiApplyImportOptimizationToBootDrivers((INT64)LoaderBlock);
  if( (MiFlags & 0x8000) != 0 )
  {
    for( k = (ULONG_PTR *)*v2; k != v2; k = (ULONG_PTR *)*k )
      VslReserveProtectedPages(0i64, k[6], 0i64, 2ui64);
  }
  MmReleaseLoadLock((_ETHREAD *)KeGetCurrentThread());
}

Referenced by:

MiInitializeDriverImages