ViTargetAddToCounter
VOID __stdcall ViTargetAddToCounter(VOID *CallerAddress, UINT64 FieldOffset, UINT64 PeakFieldOffset, UINT64 Value){
__int64 v4;
__int64 v6;
VOID *v7;
UINT64 v8;
_VF_AVL_TREE_NODE *v9;
unsigned __int64 RangeSize;
unsigned __int64 v11;
volatile signed __int64 *v12;
volatile signed __int64 v13;
_VF_AVL_LOCK_CONTEXT Context[4];
v4 = (unsigned int)PeakFieldOffset;
*(_OWORD *)Context = 0i64;
v6 = (unsigned int)FieldOffset;
if( (unsigned int)ViTargetUpdateTreeAllowed() )
{
VfAvlInitializeLockContext(Context, Shared);
v9 = VfAvlLookupTreeNode(&ViTargetDriversAvl, Context, v7, v8);
if( v9 )
{
RangeSize = v9[3].RangeSize;
if( RangeSize )
{
v11 = Value + _InterlockedExchangeAdd64((volatile signed __int64 *)(v6 + RangeSize), Value);
v12 = (volatile signed __int64 *)(RangeSize + v4);
do
{
if( *v12 > v11 )
break;
v13 = *v12;
}
while( v13 != _InterlockedCompareExchange64(v12, v11, *v12) );
}
}
VfAvlCleanupLockContext(Context);
}
}Referenced by:
VerifierMmAllocateNodePagesForMdlEx
VerifierMmAllocatePagesForMdl
VerifierMmAllocatePagesForMdlEx
VerifierMmFreePagesFromMdl
VerifierMmMapIoSpace
VerifierMmMapLockedPages
VerifierMmMapLockedPagesSpecifyCache
VerifierMmProbeAndLockPages
VerifierMmProbeAndLockProcessPages
VerifierMmUnlockPages
VerifierMmUnmapIoSpace
VerifierMmUnmapLockedPages