MiCommitEnclavePages

__int64 __fastcall MiCommitEnclavePages(
        __int64 a1,
        __int64 a2,
        unsigned __int64 a3,
        unsigned __int64 a4,
        int a5,
        unsigned int a6){
  unsigned int v7; 
  _MMPTE *PteBase; 
  _MI_PARTITION *v9; 
  MMPTE *v10; 
  unsigned int v11; 
  UINT64 v12; 
  UINT64 v13; 
  char *v14; 
  INT64 v15; 
  UINT8 v16; 
  UINT8 v17; 
  INT64 v18; 
  INT64 v19; 
  int v20; 
  bool v21; 
  UINT64 v22; 
  MMPTE *EndingPte; 
  UINT64 v24; 
  CHAR v25; 
  UINT8 v27; 
  if( a5 != 4096 )
    return 3221225715i64;
  v7 = a6;
  if( (a6 & 7) == 0 || a6 > 7 || (a6 & 5) == 5 )
    return 3221225714i64;
  PteBase = MmGetPteBase();
  v9 = (_MI_PARTITION *)((char *)PteBase + ((a3 >> 9) & 0x7FFFFFFFF8i64));
  v10 = (_MMPTE *)((char *)PteBase + ((a4 >> 9) & 0x7FFFFFFFF8i64));
  v11 = 0;
  v12 = (UINT64)v9;
  v13 = 0i64;
  v14 = 0i64;
  v15 = *((_QWORD *)KeGetCurrentThread() + 23) + 1664i64;
  v16 = MiLockWorkingSetShared(v15);
  v27 = v16;
  if( v9 > (_MI_PARTITION *)v10 )
    goto LABEL_27;
  v17 = v16;
  do
  {
    if( (v12 & 0x78) == 0 && (_MI_PARTITION *)v12 != v9 )
    {
      if( MiWorkingSetIsContended(v15) || KeShouldYieldProcessor() )
        goto LABEL_14;
      if( !v14 )
        goto LABEL_20;
      MiPageTableLockIsContended(v15, (UINT64)v14, v18, v19, (INT64)EndingPte, v24, v25);
      if( v20 )
      {
LABEL_14:
        if( v14 )
        {
          MiUnlockPageTableInternal(v15, (UINT64)v14);
          v14 = 0i64;
        }
        MiUnlockWorkingSetShared(v15, v17);
        MiLockWorkingSetShared(v15);
      }
    }
    if( v14 )
    {
      if( (v12 & 0xFFF) != 0 )
        goto LABEL_21;
      MiUnlockPageTableInternal(v15, (UINT64)v14);
    }
LABEL_20:
    v14 = (char *)MmGetPteBase() + ((v12 >> 9) & 0x7FFFFFFFF8i64);
    MiMakeSystemAddressValid(v12, 0i64, (*(_DWORD *)(a2 + 48) >> 12) & 0x3F, v17, 0);
LABEL_21:
    v21 = (MI_READ_PTE_LOCK_FREE(v12) & 1) == 0;
    v22 = v13 + 1;
    if( !v21 )
      v22 = v13;
    v12 += 8i64;
    v13 = v22;
  }
  while( v12 <= (unsigned __int64)v10 );
  v7 = a6;
  if( v14 )
    MiUnlockPageTableInternal(v15, (UINT64)v14);
  v16 = v27;
LABEL_27:
  MiUnlockWorkingSetShared(v15, v16);
  if( v13 )
  {
    LODWORD(EndingPte) = v7;
    return(unsigned int)MiAddPagesToEnclave(a2, v13, v9, v10, EndingPte, v24);
  }
  return v11;
}

Referenced by:

MiAllocateVirtualMemory