VfTargetEtwRegister
VOID __stdcall VfTargetEtwRegister(UINT64 RegHandle, VOID *CallerAddress){
int v4;
VOID **PoolWithTag;
_VF_AVL_TREE_NODE *v6;
unsigned __int64 RangeSize;
VOID **v8;
VOID ***v9;
_VF_AVL_LOCK_CONTEXT Context[6];
*(_OWORD *)Context = 0i64;
if( !VfSafeMode )
{
v4 = 0;
PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 0x20ui64, 1413834326i64);
VfAvlInitializeLockContext(Context, Exclusive);
v6 = VfAvlLookupTreeNode(&ViTargetDriversAvl, Context, CallerAddress, 1ui64);
if( v6 )
{
RangeSize = v6[3].RangeSize;
if( RangeSize )
{
if( PoolWithTag )
{
v8 = (VOID **)(RangeSize + 16);
PoolWithTag[2] = (VOID *)RegHandle;
PoolWithTag[3] = CallerAddress;
v9 = (VOID ***)v8[1];
if( *v9 != v8 )
__fastfail(3u);
*PoolWithTag = v8;
v4 = 1;
PoolWithTag[1] = v9;
*v9 = PoolWithTag;
v8[1] = PoolWithTag;
}
else
{
*(_DWORD *)(RangeSize + 32) |= 1u;
}
}
}
VfAvlCleanupLockContext(Context);
if( !v4 )
{
if( PoolWithTag )
ExFreePoolWithTag(PoolWithTag, 0x54456656u);
}
}
}Referenced by:
VerifierEtwRegister
VerifierEtwRegisterClassicProvider