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