MiLockWorkingSetForLargeMapping

UINT8 __fastcall MiLockWorkingSetForLargeMapping(INT64 a1, INT64 a2, INT64 a3){
  void *v4; 
  __int64 v5; 
  VOID *PoolMm; 
  INT64 *v7; 
  KIRQL v8; 
  KIRQL v9; 
  INT64 *SharedVm; 
  if( (*(_BYTE *)(a1 + 184) & 7) != 0 )
  {
    SharedVm = MiGetSharedVm(a1);
    v9 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)SharedVm);
    goto LABEL_10;
  }
  v4 = 0i64;
  v5 = *(_QWORD *)(*((_QWORD *)KeGetCurrentThread() + 23) + 1680i64);
  if( !*(_QWORD *)(v5 + 608) )
  {
    PoolMm = ExAllocatePoolMm(64i64, 0x800ui64, 0x6C53694Dui64, (unsigned int)a3 | 0x80000000);
    v4 = PoolMm;
    if( PoolMm )
      memset((INT64)PoolMm, 0i64);
  }
  v7 = MiGetSharedVm(a1);
  v8 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)v7);
  *((_DWORD *)v7 + 1) = 0;
  v9 = v8;
  if( v4 )
  {
    if( !*(_QWORD *)(v5 + 608) )
    {
      *(_QWORD *)(v5 + 608) = v4;
      return v9;
    }
    MiUnlockWorkingSetExclusive(a1, v8);
    ExFreePoolWithTag(v4, 0);
    SharedVm = MiGetSharedVm(a1);
    ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)SharedVm);
LABEL_10:
    *((_DWORD *)SharedVm + 1) = 0;
  }
  return v9;
}

Referenced by:

MiCommitExistingVad
MiMapUserLargePages