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