IopCleanupFileObjectIosbRange
VOID __stdcall IopCleanupFileObjectIosbRange(_IOP_FOEXT_IOSB_RANGE *IosbRange){
_MDL **v2;
INT64 v3;
_QWORD *v4;
INT64 v5;
_MDL **v6;
_MDL *v7;
_MDL *v8;
void *Buffer[3];
Buffer[1] = 0i64;
Buffer[0] = *((void **)IosbRange + 4);
v2 = 0i64;
ObfDereferenceObjectWithTag(Buffer[0], 0x70436F49ui64);
*((_QWORD *)IosbRange + 4) = 0i64;
ExAcquireFastMutex((PFAST_MUTEX)((char *)&stru_140C452E0 + 2784));
v4 = RtlLookupElementGenericTableAvl((_RTL_AVL_TABLE *)((char *)&stru_140C452E0 + 2656), Buffer);
v6 = (_MDL **)v4[1];
if( v6 )
{
while( *((_MDL **)IosbRange + 2) != v6[3] )
{
v2 = v6;
v6 = (_MDL **)v6[5];
if( !v6 )
goto LABEL_6;
}
--*(_DWORD *)v6;
}
LABEL_6:
if( !*(_DWORD *)v6 )
{
v7 = v6[4];
if( v7 )
MmUnmapLockedPages(v7, v6[3]);
MmUnlockPages((INT64)v6[3], v3, v5);
IoFreeMdl(v6[3]);
v8 = v6[5];
if( v2 )
v2[5] = v8;
else
v4[1] = v8;
ExFreePoolWithTag(v6, 0);
if( !v4[1] )
RtlDeleteElementGenericTableAvl((PRTL_AVL_TABLE)((char *)&stru_140C452E0 + 2656), Buffer);
}
KeReleaseGuardedMutex((PKGUARDED_MUTEX)((char *)&stru_140C452E0 + 2784));
}Referenced by:
IopCleanupProcessResources