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