VmpInvalidateOutstandingFaults

__int64 __fastcall VmpInvalidateOutstandingFaults(__int64 a1, unsigned __int64 a2, __int64 a3){
  volatile int *v3; 
  unsigned __int64 v6; 
  __int64 v7; 
  __int64 v8; 
  unsigned __int64 v9; 
  _QWORD *i; 
  unsigned __int64 v11; 
  unsigned __int64 v12; 
  _QWORD *v13; 
  unsigned __int64 v14; 
  bool v15; 
  unsigned __int64 v16; 
  _QWORD *v17; 
  _QWORD **v18; 
  _QWORD *v19; 

  v3 = (volatile int *)(a1 + 64);
  v6 = a2 + a3 - 1;
  v7 = 0i64;
  ExAcquireSpinLockSharedAtDpcLevel((PEX_SPIN_LOCK)(a1 + 64));
  v8 = a1 + 48;
  v9 = *(_QWORD *)v8;
  if( (*(_BYTE *)(v8 + 8) & 1) != 0 && v9 )
    v9 ^= v8;
  i = 0i64;
  while( v9 )
  {
    v11 = *(_QWORD *)(v9 + 24) & 0xFFFFFFFFFFFFFi64;
    if( a2 > v11 )
    {
      v12 = *(_QWORD *)(v9 + 8);
    }
    else
    {
      v12 = *(_QWORD *)v9;
      i = (_QWORD *)v9;
      if( a2 >= v11 )
      {
        if( (*(_BYTE *)(v8 + 8) & 1) != 0 && v12 )
          v12 ^= v9;
        v13 = 0i64;
        if( v12 )
        {
          do
          {
            v14 = *(_QWORD *)(v12 + 24) & 0xFFFFFFFFFFFFFi64;
            v15 = a2 < v14;
            if( a2 > v14 )
            {
              v16 = *(_QWORD *)(v12 + 8);
            }
            else
            {
              v16 = *(_QWORD *)v12;
              if( !v15 )
                v13 = (_QWORD *)v12;
            }
            if( (*(_BYTE *)(v8 + 8) & 1) != 0 && v16 )
              v12 ^= v16;
            else
              v12 = v16;
          }
          while( v12 );
          if( v13 )
            i = v13;
        }
        break;
      }
    }
    if( (*(_BYTE *)(v8 + 8) & 1) != 0 && v12 )
      v9 ^= v12;
    else
      v9 = v12;
  }
  while( i && (i[3] & 0xFFFFFFFFFFFFFui64) <= v6 )
  {
    ++v7;
    i[3] |= 0x10000000000000ui64;
    v17 = i;
    v18 = (_QWORD **)i[1];
    if( v18 )
    {
      v19 = *v18;
      for( i = (_QWORD *)i[1]; v19; v19 = (_QWORD *)*v19 )
        i = v19;
    }
    else
    {
      while( 1 )
      {
        i = (_QWORD *)(i[2] & 0xFFFFFFFFFFFFFFFCui64);
        if( !i || (_QWORD *)*i == v17 )
          break;
        v17 = i;
      }
    }
  }
  ExReleaseSpinLockSharedFromDpcLevel(v3);
  return v7;
}

Referenced by:

VmpFlushTbVaRange