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