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