MiReleaseReadListResources

VOID __fastcall MiReleaseReadListResources(INT64 a1){
  __int64 v1; 
  void **v3; 
  void ***v4; 
  void **v5; 
  __int64 v6; 
  v1 = *(_QWORD *)(a1 + 8);
  MiFreeReadListPages(a1);
  if( (*(_DWORD *)(v1 + 56) & 0x20) == 0 )
  {
    v3 = (void **)(a1 + 24);
    while( 1 )
    {
      v4 = (void ***)*v3;
      if( *v3 == v3 )
        break;
      if( v4[1] != v3 || (v5 = *v4, (*v4)[1] != v4) )
        __fastfail(3u);
      *v3 = v5;
      v6 = 0i64;
      for( v5[1] = v3; (unsigned int)v6 < *((_DWORD *)v4 + 4); v6 = (unsigned int)(v6 + 1) )
        MiRemoveViewsFromSectionWithPfn((ULONG_PTR)v4[v6 + 3], *((unsigned int *)v4[v6 + 3] + 11), 4u);
      ExFreePoolWithTag(v4, 0);
    }
  }
}

Referenced by:

MiPfPrepareReadList
MiPfPrepareSequentialReadList
MiPrefetchControlArea
MmPrefetchForCacheManager
MmPrefetchPagesEx
MmWaitForCacheManagerPrefetch