VfAvlDeleteTreeNode

INT64 __fastcall VfAvlDeleteTreeNode(INT64 a1, INT64 a2, UINT64 a3, INT64 a4){
  UINT64 v6; 
  __int64 v7; 
  __int64 v8; 
  INT64 v9; 
  UINT64 Buffer; 
  INT64 v12; 
  __int64 v13; 
  v13 = 0i64;
  Buffer = a3;
  if( a4 )
    v12 = a4;
  else
    v12 = *(_QWORD *)a1;
  ViAvlNodeInitializeSessionId(a1, (INT64)&Buffer);
  v6 = ViAvlTableIndex(a1, Buffer);
  ViAvlRaiseIrqlSafe(a2);
  v7 = 192 * v6;
  ViAvlAcquireTableLockAtDpcLevelSafe(192 * v6 + *(_QWORD *)(a1 + 16), a2);
  RtlDeleteElementGenericTableAvl((RTL_AVL_TABLE *)(192 * v6 + *(_QWORD *)(a1 + 16)), &Buffer);
  _InterlockedDecrement64((volatile signed __int64 *)(a1 + 8));
  v8 = *(_QWORD *)(a1 + 16);
  v9 = *(_QWORD *)(v8 + 192 * v6 + 112);
  *(_QWORD *)(v8 + v7 + 112) = 0i64;
  ViAvlReleaseTableLockFromDpcLevel(v7 + *(_QWORD *)(a1 + 16), a2);
  return v9;
}

Referenced by:

VerifierExDeleteResourceLite
VerifierExInitializeResourceLite
VfCheckForResource
VfTargetDriversRemove
ViDevObjRemove
ViLookasideAdd
ViLookasideDelete
ViRemLockDeleteFirstTreeNode