EtwpTrackDecodeGuidForSession
BOOL __stdcall EtwpTrackDecodeGuidForSession(INT64 a1, INT64 a2){
__int64 v2;
_EX_PUSH_LOCK *v3;
__int64 v4;
bool v6;
_QWORD *i;
__int64 v8;
unsigned int v9;
VOID **PoolWithTag;
__int128 v11;
__int64 v13;
v2 = *(_QWORD *)(a2 + 104);
v3 = (_EX_PUSH_LOCK *)(a1 + 704);
v4 = *(_QWORD *)(a2 + 32);
v6 = 0;
ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)(a1 + 704), 0i64);
for( i = *(_QWORD **)(a1 + 128); ; i = (_QWORD *)*i )
{
if( !i )
{
v9 = *(_DWORD *)(a1 + 340) + 2048;
if( v9 <= *(_DWORD *)(a1 + 4) && v9 <= 0x10000 )
{
PoolWithTag = ExAllocatePoolWithTag(1ui64, 0x30ui64, 1651995717i64);
if( PoolWithTag )
{
*PoolWithTag = *(VOID **)(a1 + 128);
*(_OWORD *)(PoolWithTag + 1) = *(_OWORD *)(v2 + 34);
v11 = *(_OWORD *)(v4 + 40);
*((_BYTE *)PoolWithTag + 40) = 0;
*(_OWORD *)(PoolWithTag + 3) = v11;
++*(_DWORD *)(a1 + 136);
*(_DWORD *)(a1 + 340) += 32;
*(_QWORD *)(a1 + 128) = PoolWithTag;
_InterlockedOr((volatile signed __int32 *)(a1 + 836), 0x8C0u);
v6 = 1;
}
}
goto LABEL_11;
}
v8 = *(_QWORD *)(v2 + 34) - i[1];
if( !v8 )
v8 = *(_QWORD *)(v2 + 42) - i[2];
if( !v8 )
break;
}
v13 = *(_QWORD *)(v4 + 40) - i[3];
if( !v13 )
v13 = *(_QWORD *)(v4 + 48) - i[4];
v6 = v13 == 0;
LABEL_11:
if( (_InterlockedExchangeAdd64(&v3->_bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock(v3);
KeAbPostRelease(v3);
return v6;
}Referenced by:
AddDecodeGuidToSessions
EtwpUpdateRegEntryEnableMask