MiMarkKernelImageCfgBits

__int64 __fastcall MiMarkKernelImageCfgBits(__int64 a1, __int64 a2){
  int KernelCfgBitmapPageTables; 
  _ETHREAD *CurrentThread; 
  UINT64 v6; 
  INT64 v7; 
  unsigned int v8; 
  __int64 v9; 
  __int64 v10; 
  unsigned int v11; 
  unsigned __int64 v12; 
  __int64 v13; 
  ULONG Size[2]; 
  char *v15; 
  char *v16; 
  UINT64 v17[2]; 
  int v18; 
  __int64 v19; 
  int v20; 
  __int64 v21; 
  __int64 v22; 
  __int64 v23; 
  __int64 v24; 
  INT64 result[14]; 
  v16 = 0i64;
  v19 = 0i64;
  v20 = 0;
  v22 = 0i64;
  v24 = 0i64;
  v15 = 0i64;
  Size[0] = 0;
  if( a2 )
  {
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    --*((_WORD *)CurrentThread + 243);
    ExAcquirePushLockExclusiveEx((UINT64)&qword_140C4C980, 0i64);
    KernelCfgBitmapPageTables = MiAllocateKernelCfgBitmapPageTables(*(_QWORD *)(a1 + 48), *(unsigned int *)(a1 + 64));
    MiReleaseKernelCfgLock();
    if( KernelCfgBitmapPageTables >= 0 )
    {
      v6 = *(unsigned int *)(a1 + 64);
      v7 = *(_QWORD *)(a1 + 48);
      v8 = *(_DWORD *)(a1 + 64);
      v17[0] = a1;
      v17[1] = 0i64;
      v21 = 0i64;
      v23 = 0i64;
      v18 = (v8 >> 12) + ((v6 & 0xFFF) != 0);
      KernelCfgBitmapPageTables = VslCompleteSecureDriverLoad(*(_QWORD *)(a1 + 112), v7, v6);
      MiUnlockDriverPages(v17);
      if( KernelCfgBitmapPageTables >= 0 )
      {
        LODWORD(v9) = RtlImageDirectoryEntryToData(*(PVOID *)(a1 + 48), 1u, 0xAu, (UINT64 *)Size);
        v10 = v9;
        if( v9 && Size[0] >= 0xB0 && *(_QWORD *)(v9 + 168) )
        {
          v11 = 0;
          while( 1 )
          {
            v11 = MiSnapDriverRange(a1, v11, 2, 0i64, &v15, &v16);
            if( v15 )
            {
              v12 = *(_QWORD *)(v10 + 160);
              v13 = (_QWORD)MmGetPteBase() << 25;
              if( v12 >= (((_QWORD)v15 << 25) - v13) >> 16 && v12 <= ((((_QWORD)v16 << 25) - v13) | 0xFFF0000) >> 16 )
                break;
            }
            if( !v11 )
              return(unsigned int)KernelCfgBitmapPageTables;
          }
          *(_DWORD *)(a1 + 104) |= 0x800u;
        }
        else
        {
          *(_DWORD *)(a1 + 104) |= 0x100u;
        }
      }
    }
  }
  else if( (MiFlags & 0x8000) != 0 )
  {
    memset((INT64)result, 0i64);
    result[1] = *(_QWORD *)(a1 + 48);
    KernelCfgBitmapPageTables = VslpEnterIumSecureMode(2u, 217, 0i64, (INT64)result);
    if( (MiFlags & 0x80000) != 0 )
      MiFlushKernelCfgBitmap(*(_QWORD *)(a1 + 48), *(unsigned int *)(a1 + 64));
  }
  else
  {
    return 0;
  }
  return(unsigned int)KernelCfgBitmapPageTables;
}

Referenced by:

MiInitializeKernelCfg
MiProcessKernelCfgImage
MiUnloadSystemImage