MiDeleteEmptyPageTableTail

INT64 __fastcall MiDeleteEmptyPageTableTail(INT64 *a1){
  __int64 v2; 
  unsigned __int64 *v3; 
  unsigned __int64 v4; 
  unsigned __int64 v5; 
  unsigned int i; 
  UINT64 v7; 
  UINT64 SetBits; 
  unsigned __int64 v9; 
  UINT64 v10; 
  UINT64 NextForwardRunClear; 
  UINT64 v12; 
  UINT64 v13; 
  unsigned __int64 v14; 
  INT64 v15; 
  INT64 v17; 
  INT64 result; 
  UINT64 v19; 
  UINT64 v20; 
  v2 = a1[2];
  v19 = 0i64;
  MiFlushTbList(v2);
  v3 = (unsigned __int64 *)a1[21];
  v17 = 512i64;
  v4 = *v3;
  result = (INT64)(v3 + 3);
  if( v4 )
  {
    v5 = v4 & 0xFFFFFFFFFFFFF000ui64;
    for( i = 0; i < 2; ++i )
    {
      v7 = 0i64;
      do
      {
        SetBits = RtlFindSetBitsEx((UINT64 *)&v17, 1ui64, v7);
        v9 = v17;
        v10 = SetBits;
        if( SetBits < v7 || SetBits == -1i64 )
          break;
        NextForwardRunClear = RtlFindNextForwardRunClearEx((INT64)&v17, SetBits, &v19);
        v12 = v19;
        v20 = NextForwardRunClear;
        if( !NextForwardRunClear )
          v12 = v9;
        v13 = v12 - v10;
        v14 = v5 + 8 * v10;
        *v3 = v14;
        v3[1] = v14 + 8 * v13 - 8;
        if( i )
          MiDeleteEmptyPageTableCommit(a1);
        else
          MiDeletePteRun(a1[3], (__int64)v3);
        v7 = v20 + v10 + v13;
      }
      while( v7 < v9 );
      if( !i )
      {
        if( !v3[12] )
          break;
        MiReleaseWalkLocks((INT64)a1);
      }
    }
    v15 = result;
    *v3 = 0i64;
    v3[1] = 0i64;
    memset(v15, 0i64);
  }
  return 0i64;
}

Referenced by:

No references.