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