MiCreateEnclaveRegions

NTSTATUS __stdcall MiCreateEnclaveRegions(_LOADER_PARAMETER_BLOCK *LoaderBlock){
  _RTL_BALANCED_NODE *v2; 
  _LIST_ENTRY *p_MemoryDescriptorListHead; 
  __int64 v4; 
  _LIST_ENTRY *i; 
  UINT64 Blink; 
  UINT64 Flink; 
  _RTL_BALANCED_NODE *v9; 
  _RTL_BALANCED_NODE *Pool; 
  BOOL v11; 
  _QWORD *v12; 
  _QWORD *v13; 
  _MMPFN *v14; 
  UINT8 v15; 
  INT64 v16; 
  UINT64 v17; 
  __int64 bf_0; 
  unsigned __int64 v19; 
  UINT64 BitsMustBeChanged; 
  UINT64 v21; 
  _LIST_ENTRY *v22; 

  *(&stru_140C4DB30 + 536) = (char *)&stru_140C4DB30 + 4280;
  *(&stru_140C4DB30 + 535) = (char *)&stru_140C4DB30 + 4280;
  v2 = 0i64;
  *(&stru_140C4DB30 + 537) = 0i64;
  ExInitializePushLock((PULONG_PTR)&stru_140C4DB30 + 538);
  p_MemoryDescriptorListHead = &LoaderBlock->MemoryDescriptorListHead;
  v4 = MiSwizzleInvalidPte(128i64);
  v22 = p_MemoryDescriptorListHead;
  for( i = p_MemoryDescriptorListHead->Flink; i != p_MemoryDescriptorListHead; i = i->Flink )
  {
    if( ((LODWORD(i[1].Flink) - 33) & 0xFFFFFFFD) != 0 )
      continue;
    Blink = (UINT64)i[1].Blink;
    Flink = (UINT64)i[2].Flink;
    if( v2 )
    {
      v9 = v2[1].Children[1];
      if( (_RTL_BALANCED_NODE *)Blink == (_RTL_BALANCED_NODE *)((char *)v9 + (unsigned __int64)v2[1].Children[0]) )
      {
        v2[1].Children[1] = (_RTL_BALANCED_NODE *)((char *)v9 + Flink);
        goto LABEL_16;
      }
    }
    Pool = (_RTL_BALANCED_NODE *)MiAllocatePool(64i64, 0x28ui64, 0x52456D4Dui64);
    v2 = Pool;
    if( !Pool )
      return 0;
    Pool[1].Children[0] = (_RTL_BALANCED_NODE *)Blink;
    v11 = 0;
    Pool[1].Children[1] = (_RTL_BALANCED_NODE *)Flink;
    v12 = (_QWORD *)*(&stru_140C4DB30 + 530);
    if( !*(&stru_140C4DB30 + 530) )
      goto LABEL_15;
    while( Blink < 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((_RTL_BALANCED_NODE **)&stru_140C4DB30 + 530, (UINT64)v12, v11, v2);
LABEL_16:
    LODWORD(BitsMustBeChanged) = 0;
    MiUpdateLargePageBitMap((UINT64)&Irp, Blink, Flink, 0i64, BitsMustBeChanged);
    v14 = &MmGetPfnDb()[Blink];
    if( Flink )
    {
      do
      {
        v15 = MiLockPageInline(v14);
        bf_0 = v14->u4._bf_0;
        v19 = v15;
        v14->u2._bf_0 &= 0x8000000000000000ui64;
        v14->u3.ReferenceCount = 0;
        v14->OriginalPte.u.Long = v4;
        v14->u4._bf_0 = bf_0 & 0x8FFFFFFFFFFFFFFFui64 | 0x1000000000000000i64;
        if( LODWORD(i[1].Flink) == 33 )
          MiInsertPageInFreeOrZeroedList(Blink, 0x100ui64, v16, v17, BitsMustBeChanged, v21);
        else
          MiInitializeMdlPfn(v14, 0i64);
        _InterlockedAnd64(&v14->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
        __writecr8(v19);
        ++v14;
        ++Blink;
        --Flink;
      }
      while( Flink );
      p_MemoryDescriptorListHead = v22;
    }
    *(&stru_140C4DB30 + 569) -= i[2].Flink;
  }
  return !*(&stru_140C4DB30 + 530) || MiInitializeEnclaveMetadataPage();
}

Referenced by:

MiInitSystem