ViHalFreeDomainCommonBuffer
UINT8 __stdcall ViHalFreeDomainCommonBuffer(_LARGE_INTEGER *LogicalAddress){
UINT8 v2;
void *v3;
unsigned __int64 v4;
__int64 v5;
__int64 *v6;
__int64 **v8;
v2 = 0;
v3 = 0i64;
v4 = (unsigned __int8)KeAcquireSpinLockRaiseToDpc(&qword_140D49370);
v5 = ViDomainCommonBufferList;
if( (__int64 *)ViDomainCommonBufferList != &ViDomainCommonBufferList )
{
while( 1 )
{
v3 = (void *)v5;
v6 = *(__int64 **)v5;
if( *(_QWORD *)(v5 + 16) == LogicalAddress->QuadPart )
break;
v5 = *(_QWORD *)v5;
if( v6 == &ViDomainCommonBufferList )
goto LABEL_4;
}
v2 = 1;
v8 = *(__int64 ***)(v5 + 8);
if( v6[1] != v5 || *v8 != (__int64 *)v5 )
__fastfail(3u);
*v8 = v6;
v6[1] = (__int64)v8;
}
LABEL_4:
KxReleaseSpinLock(&qword_140D49370);
__writecr8(v4);
if( v2 )
ExFreePoolWithTag(v3, 0);
return v2;
}Referenced by:
VfFreeCommonBuffer