VfTargetEtwUnregister
VOID __stdcall VfTargetEtwUnregister(UINT64 RegHandle, VOID *CallerAddress){
int v3;
void *v4;
VOID *v5;
_VF_AVL_TREE_NODE *v6;
unsigned __int64 RangeSize;
_QWORD *v8;
_QWORD *v9;
_QWORD *v10;
UINT64 v11;
_VF_AVL_LOCK_CONTEXT LockContext[6];
*(_OWORD *)LockContext = 0i64;
if( !VfSafeMode )
{
v3 = 0;
v4 = 0i64;
VfAvlInitializeLockContext(LockContext, Exclusive);
v6 = VfAvlLookupTreeNode(&ViTargetDriversAvl, LockContext, v5, 1ui64);
if( v6 )
{
RangeSize = v6[3].RangeSize;
if( RangeSize )
{
v8 = *(_QWORD **)(RangeSize + 16);
if( v8 == (_QWORD *)(RangeSize + 16) )
{
LABEL_7:
if( !dword_140C2A698 && (*(_DWORD *)(RangeSize + 32) & 1) == 0 && (MmVerifierData & 0x800) != 0 )
VerifierBugCheckIfAppropriate(0xC4ui64, 0xDCu, 0, 0, 0, v11);
}
else
{
while( 1 )
{
v4 = v8;
v9 = (_QWORD *)*v8;
if( v8[2] == RegHandle )
break;
v8 = (_QWORD *)*v8;
if( v9 == (_QWORD *)(RangeSize + 16) )
goto LABEL_7;
}
v3 = 1;
if( (_QWORD *)v9[1] != v8 || (v10 = (_QWORD *)v8[1], (_QWORD *)*v10 != v8) )
__fastfail(3u);
*v10 = v9;
v9[1] = v10;
}
}
}
VfAvlCleanupLockContext(LockContext);
if( v3 )
ExFreePoolWithTag(v4, 0);
}
}Referenced by:
VerifierEtwUnregister