MiBackSystemImageWithPagefile

VOID __stdcall MiBackSystemImageWithPagefile(
        _KLDR_DATA_TABLE_ENTRY *DataTableEntry,
        _MI_IMPORT_LIST_CHAIN *ImportListChain,
        INT64 a3,
        VOID *a4){
  int GpValue_high; 
  void *DllBase; 
  _MI_IMPORT_LIST_CHAIN *v7; 
  INT64 v8; 
  VOID *v9; 
  int v10; 
  unsigned __int64 LoadedImports; 
  int v12; 
  unsigned int v13; 
  __int64 v14; 
  _KLDR_DATA_TABLE_ENTRY *v15; 
  unsigned int v16; 
  __int128 v17; 

  GpValue_high = HIDWORD(DataTableEntry[1].GpValue);
  v17 = 0i64;
  if( (GpValue_high & 0xC) == 0 )
  {
    DllBase = DataTableEntry->DllBase;
    if( MiGetSystemRegionType((UINT64)DllBase) != 1 )
    {
      v10 = GpValue_high;
      if( DataTableEntry->SectionPointer && (GpValue_high & 2) == 0 && !MI_IS_PHYSICAL_ADDRESS(DllBase) )
      {
        MiBackSingleImageWithPagefile(DataTableEntry);
        v10 = HIDWORD(DataTableEntry[1].GpValue);
      }
      LoadedImports = (unsigned __int64)DataTableEntry->LoadedImports;
      v12 = 0;
      if( LoadedImports != -2i64 && LoadedImports != 1 )
      {
        if( (LoadedImports & 1) != 0 )
        {
          *(_QWORD *)&v17 = 1i64;
          *((_QWORD *)&v17 + 1) = LoadedImports & 0xFFFFFFFFFFFFFFFEui64;
          LoadedImports = (unsigned __int64)&v17;
        }
        HIDWORD(DataTableEntry[1].GpValue) = v10 | 8;
        v13 = 0;
        if( *(_QWORD *)LoadedImports )
        {
          v14 = 0i64;
          do
          {
            v15 = *(_KLDR_DATA_TABLE_ENTRY **)(LoadedImports + 8 * v14 + 8);
            if( !v15 )
              break;
            if( v15->LoadedImports != (void *)1 )
            {
              MiBackSystemImageWithPagefile(v15, v7, v8, v9);
              if( v12 < 0 )
                break;
            }
            v14 = ++v13;
          }
          while( (unsigned __int64)v13 < *(_QWORD *)LoadedImports );
        }
      }
      v16 = HIDWORD(DataTableEntry[1].GpValue) & 0xFFFFFFF7;
      HIDWORD(DataTableEntry[1].GpValue) = v16;
      if( v12 >= 0 )
        HIDWORD(DataTableEntry[1].GpValue) = v16 | 4;
    }
  }
}

Referenced by:

MiBackSystemImageWithPagefile
MmBackSystemImageWithPagefile