MiReleaseReadListResources

VOID __stdcall MiReleaseReadListResources(_MI_READ_LIST *MiReadList, UINT64 a2){
  __int64 v2; 
  void **v4; 
  void ***v5; 
  void **v6; 
  __int64 v7; 

  v2 = *((_QWORD *)MiReadList + 1);
  MiFreeReadListPages(MiReadList, a2);
  if( (*(_DWORD *)(v2 + 56) & 0x20) == 0 )
  {
    v4 = (void **)(MiReadList + 6);
    while( 1 )
    {
      v5 = (void ***)*v4;
      if( *v4 == v4 )
        break;
      if( v5[1] != v4 || (v6 = *v5, (*v5)[1] != v5) )
        __fastfail(3u);
      *v4 = v6;
      v7 = 0i64;
      for( v6[1] = v4; (unsigned int)v7 < *((_DWORD *)v5 + 4); v7 = (unsigned int)(v7 + 1) )
        MiRemoveViewsFromSectionWithPfn((_SUBSECTION *)v5[v7 + 3], *((unsigned int *)v5[v7 + 3] + 11));
      ExFreePoolWithTag(v5, 0);
    }
  }
}

Referenced by:

MiPfPrepareReadList
MiPfPrepareSequentialReadList
MiPrefetchControlArea
MmPrefetchForCacheManager
MmPrefetchPagesEx
MmWaitForCacheManagerPrefetch