IovpSessionDataDereference

void __fastcall IovpSessionDataDereference(PVOID Entry){
  bool v1; 
  __int64 v2; 
  _QWORD *v3; 
  __int64 v4; 
  _QWORD *v5; 
  v1 = (*((_DWORD *)Entry + 2))-- == 1;
  v2 = *(_QWORD *)Entry;
  if( v1 )
  {
    v3 = (char *)Entry + 16;
    v4 = *((_QWORD *)Entry + 2);
    if( *(PVOID *)(v4 + 8) != (char *)Entry + 16 || (v5 = (_QWORD *)*((_QWORD *)Entry + 3), (_QWORD *)*v5 != v3) )
      __fastfail(3u);
    *v5 = v4;
    *(_QWORD *)(v4 + 8) = v5;
    *((_QWORD *)Entry + 3) = (char *)Entry + 16;
    *v3 = v3;
    _InterlockedDecrement((volatile signed __int32 *)(v2 + 20));
    if( (*((_DWORD *)Entry + 8) & 4) != 0 )
      ExFreeToNPagedLookasideList((NPAGED_LOOKASIDE_LIST *)ViSessionDataLookaside, Entry);
    else
      VfUtilFreePoolDispatchLevel(Entry);
  }
}

Referenced by:

IovpCallDriver2
IovpCompleteRequest2
IovpLocalCompletionRoutine