MiGetUltraMapping

__int64 __fastcall MiGetUltraMapping(unsigned __int64 *a1, unsigned int a2, __int64 a3, char a4){
  unsigned __int64 v4; 
  __int64 v9; 
  unsigned __int64 v10; 
  unsigned __int64 v11; 
  __int64 v12; 
  __int64 result; 
  UINT64 v14; 
  _MMPTE *PteBase; 
  UINT64 v16; 
  __int64 v17; 
  __int64 v18; 
  _MMPTE *PdpteBase; 
  UINT64 SetBitsAndClear; 
  UINT64 v21; 
  unsigned __int64 v22; 
  __int64 v23; 
  __int64 v24; 
  INT64 *v25; 
  __int64 v26; 
  unsigned __int64 v27; 
  __int64 v28; 
  UINT64 v29; 
  UINT64 i; 
  _QWORD *v31; 
  __int64 v32; 
  struct _KLOCK_QUEUE_HANDLE LockHandle; 
  UINT64 v34; 
  v4 = *a1;
  v9 = MiUltraMapSizes[a2];
  memset(&LockHandle, 0, sizeof(LockHandle));
  if( !v4 )
    goto LABEL_15;
  if( a2 == 1 )
  {
    v10 = v9 << 9;
LABEL_5:
    v11 = v10 - 1;
    v12 = a3 << 12;
    if( (a3 << 12) + (v4 & (v10 - 1)) > v10 )
    {
      v4 = ~v11 & (v10 + v4 - 1);
      *a1 = v4;
    }
    if( (v11 & v4) != 0 && (a4 & 2) == 0 )
    {
      *a1 = v12 + v4;
      return v4;
    }
    v14 = (UINT64)MmGetPdeBase() + (((v4 - 1) >> 18) & 0x3FFFFFF8);
    PteBase = MmGetPteBase();
    v34 = v14;
    if( a2 <= 1 )
    {
      v28 = 2 - a2;
      do
      {
        v14 = (UINT64)PteBase + ((v14 >> 9) & 0x7FFFFFFFF8i64);
        --v28;
      }
      while( v28 );
      v34 = v14;
    }
    *(_QWORD *)v34 = ZeroPte;
    if( (a4 & 2) != 0 )
    {
      if( a2 > 1 )
        *(_QWORD *)((char *)MmGetPteBase() + ((v34 >> 9) & 0x7FFFFFFFF8i64)) = ZeroPte;
    }
    else if( a2 != 1 )
    {
      v16 = v34 + 8;
      if( ((v34 + 8) & 0xFFF) != 0 )
      {
        v17 = (_QWORD)MmGetPteBase() << 25;
        v18 = (((__int64)((v16 << 25) - v17) >> 16 << 25) - v17) >> 16;
        *(_QWORD *)v16 = MiMakeValidPte(v16, a1[2], 3087007748i64);
        result = v18;
        *a1 = v12 + v18;
        return result;
      }
    }
    goto LABEL_28;
  }
  if( a2 )
  {
    v10 = 0x200000i64;
    goto LABEL_5;
  }
LABEL_28:
  v4 -= v9;
LABEL_15:
  KeAcquireInStackQueuedSpinLock(&qword_140C4E930, &LockHandle);
  PdpteBase = MmGetPdpteBase();
  if( v4 )
  {
    v27 = (v4 - qword_140C4E938) >> 30;
    *(_QWORD *)((char *)PdpteBase + ((v4 >> 27) & 0x1FFFF8)) = ZeroPte;
    _bittestandset64((signed __int64 *)qword_140C4E960, v27);
  }
  if( (a4 & 2) != 0 )
  {
    *a1 = 0i64;
    KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
    __writecr8(LockHandle.OldIrql);
    return 0i64;
  }
  else
  {
    while( 1 )
    {
      SetBitsAndClear = RtlFindSetBitsAndClearEx(&qword_140C4E948, 1ui64, qword_140C4E940);
      v21 = SetBitsAndClear;
      if( SetBitsAndClear != -1i64 )
        break;
      KeFlushTb(0i64, 2u);
      v29 = 0i64;
      for( i = qword_140C4E948 >> 6; v29 < i; *v31 |= v32 )
      {
        v31 = (_QWORD *)(qword_140C4E950 + 8 * v29);
        v32 = *(_QWORD *)(qword_140C4E960 + 8 * v29++);
      }
      memset(qword_140C4E960, 0i64);
    }
    qword_140C4E940 = SetBitsAndClear + 1;
    KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
    __writecr8(LockHandle.OldIrql);
    v22 = qword_140C4E938 + (v21 << 30);
    if( (a4 & 1) == 0 )
      *a1 = v22 + (a3 << 12);
    if( a2 )
    {
      v23 = (__int64)MmGetPdpteBase() + ((v22 >> 27) & 0x1FFFF8);
      v24 = (_QWORD)MmGetPteBase() << 25;
      v25 = (INT64 *)(a1 + 1);
      v26 = (a2 != 1) + 1i64;
      do
      {
        *(_QWORD *)v23 = MiMakeValidPte(v23, *v25++, 3087007748i64);
        v23 = ((v23 << 25) - v24) >> 16;
        --v26;
      }
      while( v26 );
    }
    return v22;
  }
}

Referenced by:

MiAllocateHyperSpace
MiCombineAllPhysicalMemory
MiCombinePte
MiDecrementAndInsertStandbyPages
MiDeletePteRun
MiDeleteUltraMapContext
MiGetPageChain
MiHugePageOperation
MiInitializeNewUltraHugeContext
MiMapPageInHyperSpaceWorker
MiMapPagesToZero
MiScrubNodeLargePageList
MiScrubPage
MiSharePages
MiTimeSingleLargePageZeroWorker
MiWsleFree
MiZeroLargePage
MiZeroWithUltraSpace
MmMapMdl