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