MiBitmapsCachedEntryLengthChanged

void __fastcall MiBitmapsCachedEntryLengthChanged(__int64 a1, unsigned __int64 *a2, int a3){
  bool v3; 
  unsigned __int64 *v4; 
  unsigned __int64 v6; 
  unsigned __int64 i; 
  unsigned __int64 *v8; 
  unsigned int v9; 
  unsigned int v10; 
  unsigned __int64 *v11; 
  unsigned __int64 j; 
  __int64 v13; 
  unsigned __int64 v14; 
  unsigned __int64 v15; 
  v3 = 0;
  v4 = a2;
  if( a3 )
  {
    v6 = a2[1];
    if( v6 )
    {
      v8 = *(unsigned __int64 **)v6;
      if( *(_QWORD *)v6 )
      {
        do
        {
          v6 = (unsigned __int64)v8;
          v8 = (unsigned __int64 *)*v8;
        }
        while( v8 );
      }
    }
    else
    {
      for( i = a2[2]; ; i = *(_QWORD *)(v6 + 16) )
      {
        v6 = i & 0xFFFFFFFFFFFFFFFCui64;
        if( !v6 || *(unsigned __int64 **)v6 == a2 )
          break;
        a2 = (unsigned __int64 *)v6;
      }
    }
  }
  else
  {
    v6 = *a2;
    v11 = a2;
    if( *a2 )
    {
      for( ; *(_QWORD *)(v6 + 8); v6 = *(_QWORD *)(v6 + 8) )
        ;
    }
    else
    {
      for( j = a2[2]; ; j = *(_QWORD *)(v6 + 16) )
      {
        v6 = j & 0xFFFFFFFFFFFFFFFCui64;
        if( !v6 || *(unsigned __int64 **)(v6 + 8) == v11 )
          break;
        v11 = (unsigned __int64 *)v6;
      }
    }
    if( !v6 )
      return;
  }
  v9 = *(_DWORD *)(v6 + 52);
  v10 = *((_DWORD *)v4 + 13);
  if( a3 )
  {
    if( v9 > v10 )
      return;
  }
  else if( v9 < v10 )
  {
    return;
  }
  v13 = a1 + 144;
  RtlRbRemoveNode((unsigned __int64 *)v13, (unsigned __int64)v4);
  v14 = *(_QWORD *)v13;
  if( (*(_BYTE *)(v13 + 8) & 1) != 0 )
  {
    if( v14 )
      v14 ^= v13;
    else
      v14 = 0i64;
  }
  if( v14 )
  {
    while( 1 )
    {
      if( v4[6] < *(_QWORD *)(v14 + 48) )
      {
        v15 = *(_QWORD *)v14;
        if( (*(_BYTE *)(v13 + 8) & 1) != 0 )
        {
          if( !v15 )
            break;
          v15 ^= v14;
        }
        if( !v15 )
          break;
      }
      else
      {
        v15 = *(_QWORD *)(v14 + 8);
        if( (*(_BYTE *)(v13 + 8) & 1) != 0 )
        {
          if( !v15 )
            goto LABEL_37;
          v15 ^= v14;
        }
        if( !v15 )
        {
LABEL_37:
          v3 = 1;
          break;
        }
      }
      v14 = v15;
    }
  }
  RtlRbInsertNodeEx((unsigned __int64 *)v13, v14, v3, (unsigned __int64)v4);
}

Referenced by:

MiInvalidatePageFileBitmapsCache