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