EtwpPsProvTraceThread
VOID __stdcall EtwpPsProvTraceThread(_ETHREAD *Thread, _INITIAL_TEB *InitialTeb, UINT8 Create){
_DWORD *CurrentThreadTeb;
__int64 v7;
int v8;
__int16 v9;
UINT64 v10;
__int64 v11;
__int64 v12;
int v13;
__int16 v14;
__int64 v15;
int v16;
int v17;
int v18;
_ETHREAD *v19;
PVOID StackBase;
PVOID StackLimit;
__int64 v22;
__int64 v23;
PCEVENT_DESCRIPTOR EventDescriptor;
EVENT_DATA_DESCRIPTOR UserData;
int *v26;
int v27;
int v28;
__int64 v29;
int v30;
int v31;
__int64 v32;
int v33;
int v34;
PVOID *p_StackBase;
int v36;
int v37;
PVOID *p_StackLimit;
int v39;
int v40;
__int64 *v41;
int v42;
int v43;
__int64 *v44;
int v45;
int v46;
__int64 v47;
int v48;
int v49;
int *v50;
int v51;
int v52;
__int64 *v53;
int v54;
int v55;
v19 = Thread;
v23 = 0i64;
StackBase = 0i64;
StackLimit = 0i64;
v16 = 0;
if( Create )
{
EventDescriptor = &ThreadStart;
CurrentThreadTeb = PsGetCurrentThreadTeb();
if( CurrentThreadTeb )
{
v7 = *(_QWORD *)(*((_QWORD *)KeGetCurrentThread() + 68) + 1408i64);
if( v7 && ((v9 = *(_WORD *)(v7 + 8), v9 == 332) || v9 == 452) )
v8 = CurrentThreadTeb[3032];
else
v8 = CurrentThreadTeb[1480];
v16 = v8;
}
}
else
{
EventDescriptor = (PCEVENT_DESCRIPTOR)ThreadStop;
v11 = *((_QWORD *)Thread + 30);
if( v11 )
{
v12 = *(_QWORD *)(*((_QWORD *)KeGetCurrentThread() + 68) + 1408i64);
if( v12 && ((v14 = *(_WORD *)(v12 + 8), v14 == 332) || v14 == 452) )
v13 = *(_DWORD *)(v11 + 12128);
else
v13 = *(_DWORD *)(v11 + 5920);
v16 = v13;
}
}
v17 = *((_DWORD *)Thread + 286);
UserData.Ptr = (unsigned __int64)&v17;
UserData.Size = 4;
UserData.Reserved = 0;
v18 = *((_DWORD *)Thread + 288);
v26 = &v18;
v27 = 4;
v28 = 0;
v29 = (__int64)Thread + 56;
v30 = 8;
v31 = 0;
v32 = (__int64)Thread + 48;
v33 = 8;
v34 = 0;
if( Create )
{
if( InitialTeb )
{
StackBase = InitialTeb->StackBase;
StackLimit = InitialTeb->StackLimit;
}
}
else
{
v15 = *((_QWORD *)Thread + 30);
if( v15 )
{
StackBase = *(PVOID *)(v15 + 8);
StackLimit = *(PVOID *)(v15 + 16);
}
}
p_StackBase = &StackBase;
v36 = 8;
v37 = 0;
p_StackLimit = &StackLimit;
v39 = 8;
v40 = 0;
PsQueryThreadStartAddress((__int64)Thread, 1);
v41 = &v22;
v42 = 8;
v43 = 0;
v22 = *((_QWORD *)Thread + 154);
v44 = &v22;
v45 = 8;
v46 = 0;
v47 = (__int64)Thread + 240;
v48 = 8;
v49 = 0;
v50 = &v16;
v51 = 4;
v52 = 0;
v10 = 10i64;
if( !Create )
{
v23 = *((_QWORD *)Thread + 9);
v53 = &v23;
v54 = 8;
v55 = 0;
v10 = 11i64;
}
EtwWrite(*(UINT64 *)EtwpPsProvRegHandle, (EVENT_DESCRIPTOR *)EventDescriptor, 0i64, v10, &UserData);
}Referenced by:
EtwTraceThread