MiCreateEnclaveRegions

UINT64 __stdcall MiCreateEnclaveRegions(_LOADER_PARAMETER_BLOCK *LoaderBlock){
  _QWORD *v2; 
  __int64 *v3; 
  INT64 v4; 
  __int64 *i; 
  UINT64 v7; 
  UINT64 v8; 
  __int64 v9; 
  _QWORD *v10; 
  bool v11; 
  _QWORD *v12; 
  _QWORD *v13; 
  char *v14; 
  unsigned __int8 v15; 
  __int64 v16; 
  unsigned __int64 v17; 
  UINT64 BitsMustBeChanged; 
  __int64 *v19; 
  qword_140C4EBF0 = (__int64)&qword_140C4EBE8;
  qword_140C4EBE8 = (__int64)&qword_140C4EBE8;
  v2 = 0i64;
  qword_140C4EBF8 = 0i64;
  ExInitializePushLock((EX_RUNDOWN_REF *)&stru_140C4EC00);
  v3 = (__int64 *)((char *)LoaderBlock + 32);
  v4 = MiSwizzleInvalidPte(128i64);
  v19 = v3;
  for( i = (__int64 *)*v3; i != v3; i = (__int64 *)*i )
  {
    if( ((*((_DWORD *)i + 4) - 33) & 0xFFFFFFFD) != 0 )
      continue;
    v7 = i[3];
    v8 = i[4];
    if( v2 )
    {
      v9 = v2[4];
      if( v7 == v9 + v2[3] )
      {
        v2[4] = v9 + v8;
        goto LABEL_16;
      }
    }
    LODWORD(v10) = MiAllocatePool((struct _SLIST_ENTRY *)0x40);
    v2 = v10;
    if( !v10 )
      return 0i64;
    v10[3] = v7;
    v11 = 0;
    v10[4] = v8;
    v12 = (_QWORD *)qword_140C4EBC0;
    if( !qword_140C4EBC0 )
      goto LABEL_15;
    while( v7 < v12[3] )
    {
      v13 = (_QWORD *)*v12;
      if( !*v12 )
        goto LABEL_15;
LABEL_20:
      v12 = v13;
    }
    v13 = (_QWORD *)v12[1];
    if( v13 )
      goto LABEL_20;
    v11 = 1;
LABEL_15:
    RtlAvlInsertNodeEx((unsigned __int64 *)&qword_140C4EBC0, (__int64)v12, v11, v2);
LABEL_16:
    LODWORD(BitsMustBeChanged) = 0;
    MiUpdateLargePageBitMap((UINT64)&MiSystemPartition, v7, v8, 0i64, BitsMustBeChanged);
    v14 = (char *)MmGetPfnDb() + 48 * v7;
    if( v8 )
    {
      do
      {
        v15 = MiLockPageInline((INT64)v14);
        v16 = *((_QWORD *)v14 + 5);
        v17 = v15;
        *((_QWORD *)v14 + 3) &= 0x8000000000000000ui64;
        *((_WORD *)v14 + 16) = 0;
        *((_QWORD *)v14 + 2) = v4;
        *((_QWORD *)v14 + 5) = v16 & 0x8FFFFFFFFFFFFFFFui64 | 0x1000000000000000i64;
        if( *((_DWORD *)i + 4) == 33 )
          MiInsertPageInFreeOrZeroedList(v7, 0x100ui64);
        else
          MiInitializeMdlPfn((INT64)v14, 0i64);
        _InterlockedAnd64((volatile signed __int64 *)v14 + 3, 0x7FFFFFFFFFFFFFFFui64);
        __writecr8(v17);
        v14 += 48;
        ++v7;
        --v8;
      }
      while( v8 );
      v3 = v19;
    }
    qword_140C4ECF8 -= i[4];
  }
  return !qword_140C4EBC0 || (unsigned int)MiInitializeEnclaveMetadataPage();
}

Referenced by:

MiInitSystem