MiGetUltraHugeAlreadyActive

_QWORD *__fastcall MiGetUltraHugeAlreadyActive(UINT64 a1, INT64 a2, INT64 a3){
  unsigned int **p_Buffer; 
  __int64 v5; 
  ULONG ClearBitsAndSet; 
  __int16 v7; 
  unsigned int *v8; 
  _QWORD *result; 
  struct _RTL_BITMAP **v10; 
  struct _RTL_BITMAP *i; 
  ULONG v12; 
  UINT64 v13; 
  UINT64 SpinCount; 
  LODWORD(SpinCount) = a3;
  v13 = a1;
  p_Buffer = *(unsigned int ***)(a2 + 224);
  v5 = *(_QWORD *)(a2 + 232);
  if( p_Buffer )
  {
    ClearBitsAndSet = RtlFindClearBitsAndSet((PRTL_BITMAP)(p_Buffer + 11), 1u, 0);
    v7 = ClearBitsAndSet;
    if( ClearBitsAndSet != -1 )
    {
      v8 = p_Buffer[21];
      LODWORD(SpinCount) = 0;
      while( _interlockedbittestandset64((volatile signed __int32 *)v8 + 6, 0x3Fui64) )
      {
        do
          KeYieldProcessorEx(&SpinCount);
        while( *((__int64 *)v8 + 3) < 0 );
      }
      if( !*((_BYTE *)p_Buffer + 69) )
        goto LABEL_6;
      _InterlockedAnd64((volatile signed __int64 *)v8 + 3, 0x7FFFFFFFFFFFFFFFui64);
    }
    MiDecrementHugeContext(p_Buffer);
    *(_QWORD *)(a2 + 224) = 0i64;
  }
  v10 = (struct _RTL_BITMAP **)(v5 + 56);
  for( i = *v10; ; i = *(struct _RTL_BITMAP **)&i->SizeOfBitMap )
  {
    if( i == (struct _RTL_BITMAP *)v10 )
      return 0i64;
    p_Buffer = &i[-5].Buffer;
    v12 = RtlFindClearBitsAndSet(i + 1, 1u, 0);
    v7 = v12;
    if( v12 != -1 )
      break;
LABEL_11:
    ;
  }
  v8 = p_Buffer[21];
  LODWORD(v13) = 0;
  while( _interlockedbittestandset64((volatile signed __int32 *)v8 + 6, 0x3Fui64) )
  {
    do
      KeYieldProcessorEx(&v13);
    while( *((__int64 *)v8 + 3) < 0 );
  }
  if( *((_BYTE *)p_Buffer + 69) )
  {
    _InterlockedAnd64((volatile signed __int64 *)v8 + 3, 0x7FFFFFFFFFFFFFFFui64);
    goto LABEL_11;
  }
  ++*((_DWORD *)p_Buffer + 47);
  *(_QWORD *)(a2 + 224) = p_Buffer;
LABEL_6:
  _InterlockedAnd64((volatile signed __int64 *)v8 + 3, 0x7FFFFFFFFFFFFFFFui64);
  *(_DWORD *)(a2 + 64) = 0;
  result = p_Buffer;
  *(_WORD *)(a2 + 216) = v7;
  return result;
}

Referenced by:

MiGetHugePageToZero