ViSpecialFreeCommonBuffer

VOID **__fastcall ViSpecialFreeCommonBuffer(
        void (__fastcall *a1)(_QWORD, _QWORD, _QWORD, _QWORD, char),
        _QWORD *a2,
        VOID *a3,
        char a4){
  VOID **result; 
  VOID **v9; 
  unsigned __int64 v10; 
  VOID ***v11; 
  VOID ***v12; 
  char v13; 

  result = (VOID **)VF_FIND_BUFFER(a2 + 10, (__int64)a3);
  v9 = result;
  if( result )
  {
    ViCheckPadding(result[2], *((unsigned int *)result + 1), result[3], *((unsigned int *)result + 2));
    v10 = (unsigned __int8)KeAcquireSpinLockRaiseToDpc(a2 + 12);
    v11 = (VOID ***)v9[6];
    v12 = (VOID ***)v9[7];
    if( v11[1] != v9 + 6 || *v12 != v9 + 6 )
      __fastfail(3u);
    *v12 = (VOID **)v11;
    v11[1] = (VOID **)v12;
    KxReleaseSpinLock(a2 + 12);
    __writecr8(v10);
    memset(a3, 0i64, *((_DWORD *)v9 + 2));
    v13 = a4;
    a1(a2[2], *((unsigned int *)v9 + 1), v9[4], v9[2], v13);
    DECREMENT_COMMON_BUFFERS((__int64)a2);
    ExFreePoolWithTag(v9, 0);
    return(VOID **)1;
  }
  return result;
}

Referenced by:

VfFreeCommonBuffer