EtwpGetLoggerInfoFromContext
INT64 __fastcall EtwpGetLoggerInfoFromContext(INT64 a1, INT64 a2){
unsigned int v4;
__int64 v5;
__int16 v6;
__int64 v7;
char v8;
UNICODE_STRING *v9;
__int64 v10;
char v11;
__int64 v12;
UNICODE_STRING *v13;
_PERFINFO_GROUPMASK GroupMask;
if( (*(_DWORD *)(a2 + 12) & 0x2000000) != 0 )
{
GroupMask = *(_PERFINFO_GROUPMASK *)(32i64 * *(unsigned __int8 *)(a2 + 834) + *(_QWORD *)(a2 + 1080) + 4260);
EtwpMapEnableFlags(&GroupMask, 0);
*(_DWORD *)(a1 + 72) = GroupMask.Masks[0];
}
else
{
*(_DWORD *)(a1 + 72) = 0;
}
*(_OWORD *)(a1 + 24) = *(_OWORD *)(a2 + 292);
*(_DWORD *)(a1 + 64) = *(_DWORD *)(a2 + 12);
*(_DWORD *)(a1 + 60) = *(_DWORD *)(a2 + 308);
*(_DWORD *)(a1 + 68) = *(_DWORD *)(a2 + 224);
*(_DWORD *)(a1 + 48) = *(_DWORD *)(a2 + 4) >> 10;
*(_DWORD *)(a1 + 96) = *(_DWORD *)(a2 + 248);
*(_DWORD *)(a1 + 52) = *(_DWORD *)(a2 + 240);
*(_DWORD *)(a1 + 56) = *(_DWORD *)(a2 + 252);
*(_DWORD *)(a1 + 104) = *(_DWORD *)(a2 + 256);
*(_DWORD *)(a1 + 100) = *(_DWORD *)(a2 + 244);
v4 = *(_DWORD *)(a2 + 264);
if( v4 <= *(_DWORD *)(a2 + 272) )
v4 = *(_DWORD *)(a2 + 272);
*(_DWORD *)(a1 + 108) = v4;
*(_QWORD *)(a1 + 80) = 0i64;
v5 = (*(_DWORD *)(a2 + 832) >> 4) & 1;
*(_QWORD *)(a1 + 80) = v5;
*(_QWORD *)(a1 + 80) = v5 | (*(_DWORD *)(a2 + 832) >> 26) & 2;
*(_DWORD *)(a1 + 112) = *(_DWORD *)(a2 + 268);
*(_DWORD *)(a1 + 116) = *(_DWORD *)(a2 + 276);
*(_DWORD *)(a1 + 160) = *(_DWORD *)(a2 + 360);
*(_DWORD *)(a1 + 76) = *(_DWORD *)(a2 + 228);
if( *(_DWORD *)a2 )
v6 = *(_WORD *)a2;
else
v6 = -1;
*(_WORD *)(a1 + 8) = v6;
v7 = *(_QWORD *)(a2 + 48);
if( v7 )
*(_QWORD *)(a1 + 120) = *(_QWORD *)(v7 + 1152);
*(_DWORD *)(a1 + 40) = *(_DWORD *)(a2 + 216);
v8 = *((_BYTE *)KeGetCurrentThread() + 562);
ExAcquirePushLockExclusiveEx(a2 + 704, 0i64);
v10 = *(unsigned __int16 *)(a2 + 168);
if( (_WORD)v10 && *(_WORD *)(a1 + 130) )
{
if( v8 )
ProbeForWrite(*(VOID **)(a1 + 136), v10 + 2, 2ui64);
RtlCopyUnicodeString((UNICODE_STRING *)(a1 + 128), (UNICODE_STRING *)(a2 + 168), v9);
}
v11 = _InterlockedExchangeAdd64((volatile signed __int64 *)(a2 + 704), 0xFFFFFFFFFFFFFFFFui64);
if( (v11 & 2) != 0 && (v11 & 4) == 0 )
ExfTryToWakePushLock((volatile INT64 *)(a2 + 704));
KeAbPostRelease((PVOID)(a2 + 704));
v12 = *(unsigned __int16 *)(a2 + 152);
if( (_WORD)v12
&& *(_WORD *)(a1 + 146)
&& !RtlEqualUnicodeString((UNICODE_STRING *)(a2 + 152), (UNICODE_STRING *)(a1 + 144), 0) )
{
if( v8 )
ProbeForWrite(*(VOID **)(a1 + 152), v12 + 2, 2ui64);
RtlCopyUnicodeString((UNICODE_STRING *)(a1 + 144), (UNICODE_STRING *)(a2 + 152), v13);
}
return 0i64;
}Referenced by:
EtwpFlushTrace
EtwpStartLogger
EtwpStopTrace
EtwpUpdateTrace