EtwpTraceLastBranchRecord
void __fastcall EtwpTraceLastBranchRecord(unsigned int *a1, _QWORD *a2, _ETHREAD *a3, int a4){
_ETHREAD *v6;
_ETHREAD *CurrentThread;
int v9;
char v10;
__int64 v11;
PSLIST_ENTRY v12;
_KPROFILE_SOURCE v13;
UINT64 v14;
_KERNEL_STACK_LIMITS *p_Type;
__int64 v16;
__int64 v17;
void *v18;
_ETW_SILODRIVERSTATE *v19;
__int64 v20;
int v21;
unsigned int v22;
unsigned int v23;
_KERNEL_STACK_LIMITS Type;
int v25;
UINT64 LowLimit;
UINT64 HighLimit;
__int128 v28;
__int128 v29;
__int128 v30;
__int128 *v31;
int v32;
int v33;
_KERNEL_STACK_LIMITS *v34;
int v35;
int v36;
v25 = 0;
v28 = 0i64;
v6 = a3;
v29 = 0i64;
HighLimit = 0i64;
v30 = 0i64;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
LowLimit = 0i64;
Type = BugcheckStackLimits;
if( KeGetCurrentPrcb()->IdleThread != CurrentThread && (a4 & 0x1800) != 0 )
{
if( !a3 )
v6 = CurrentThread;
if( KeQueryCurrentStackInformation(&Type, &LowLimit, &HighLimit) )
{
if( (unsigned int)Type > MachineCheckStackLimits || (v9 = 929, !_bittest(&v9, Type)) )
{
v10 = 0;
v11 = (unsigned int)(24 * EtwpLastBranchStackSize);
v12 = RtlpInterlockedPopEntrySList(&xmmword_140C53AB0);
if( !v12 || (p_Type = (_KERNEL_STACK_LIMITS *)&v12[1], v12 == (PSLIST_ENTRY)-16i64) )
{
LODWORD(v16) = KeGetCurrentStackPointer(v14, v13);
if( v16 - LowLimit <= v11 + 3632 )
return;
v17 = v11 + 15;
if( v11 + 15 <= (unsigned __int64)(unsigned int)v11 )
v17 = 0xFFFFFFFFFFFFFF0i64;
v18 = alloca(v17 & 0xFFFFFFFFFFFFFFF0ui64);
v10 = 1;
p_Type = &Type;
}
if( ((int(__fastcall *)(_QWORD, _KERNEL_STACK_LIMITS *, int *))off_140C00988[0])(
(unsigned int)v11,
p_Type,
&v25) >= 0
&& v25 )
{
v19 = (_ETW_SILODRIVERSTATE *)*((_QWORD *)a1 + 135);
DWORD2(v28) = v6->Cid.UniqueProcess;
HIDWORD(v28) = v6->Cid.UniqueThread;
*(_QWORD *)&v28 = *a2;
v20 = *((_QWORD *)a1 + 126);
v23 = a4 & 0xFFFFE600 | 2;
v21 = *(_DWORD *)(v20 + 4);
v33 = 0;
v36 = 0;
v31 = &v28;
LODWORD(v29) = v21;
v35 = v25;
v22 = *a1;
v32 = 24;
v34 = p_Type;
EtwpLogKernelEvent((__int64)&v31, v19, v22, 2u, 0xC20u, v23);
}
if( !v10 )
RtlpInterlockedPushEntrySList(&xmmword_140C53AB0, (PSLIST_ENTRY)p_Type - 1);
}
}
}
}Referenced by:
EtwpLogContextSwapEvent
EtwpLogKernelEvent
EtwpLogSystemEventUnsafe