MiFreeCombineMdls
VOID __stdcall MiFreeCombineMdls(INT64 a1){
UINT64 v1;
INT64 v2;
unsigned int i;
_DWORD *v4;
unsigned int v5;
int v6;
_DWORD *v7;
unsigned __int64 v8;
v2 = a1 + 64;
for( i = 0; i < 3; ++i )
{
v4 = *(_DWORD **)v2;
if( *(_QWORD *)v2 )
{
do
{
v5 = v4[11];
v6 = v4[10];
v7 = *(_DWORD **)v4;
if( v5 != v6 )
{
v8 = (unsigned __int64)(v6 - v5) >> 12;
memmove(v4 + 12, &v4[2 * ((unsigned __int64)v5 >> 12) + 12], 8 * v8);
*((_QWORD *)v4 + 5) = (unsigned int)((_DWORD)v8 << 12);
}
MiFreePagesFromMdl(v4, 0i64, v1);
ExFreePoolWithTag(v4, 0);
v4 = v7;
}
while( v7 );
}
*(_QWORD *)v2 = 0i64;
*(_QWORD *)(v2 + 24) = 0i64;
v2 += 8i64;
}
}Referenced by:
MiCombineWorkingSet
MiProcessCrcList