EtwActivityIdControl
NTSTATUS __stdcall EtwActivityIdControl(ULONG ControlCode, LPGUID ActivityId){
__int64 v2;
_ETHREAD *CurrentThread;
__int64 v5;
__int64 v6;
GUID *v7;
ULONG v8;
__int16 v9;
ULONG v10;
ULONG v11;
__int64 v12;
GUID v13;
NTSTATUS v14;
_QWORD *v15;
v14 = 0;
if( ControlCode == 3 )
{
v2 = *((_QWORD *)KeGetCurrentPrcb() + 4197);
*(_QWORD *)ActivityId->Data4 = _InterlockedIncrement64((volatile signed __int64 *)(v2 + 8));
*(_QWORD *)&ActivityId->Data1 = *(_QWORD *)v2;
return v14;
}
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
if( (*((_DWORD *)CurrentThread + 29) & 0x400) != 0 || *((_BYTE *)CurrentThread + 586) == 1 )
v5 = 0i64;
else
v5 = *((_QWORD *)CurrentThread + 30);
if( v5 )
{
v15 = (_QWORD *)(v5 + 5904);
v6 = *(_QWORD *)(*((_QWORD *)KeGetCurrentThread() + 23) + 1408i64);
if( v6 && ((v9 = *(_WORD *)(v6 + 8), v9 == 332) || v9 == 452) )
{
v7 = (GUID *)(v5 + 12112);
v15 = (_QWORD *)(v5 + 12112);
}
else
{
v7 = (GUID *)(v5 + 5904);
}
v8 = ControlCode - 1;
if( v8 )
{
v10 = v8 - 1;
if( v10 )
{
v11 = v10 - 2;
if( v11 )
{
if( v11 == 1 )
{
*ActivityId = *v7;
v12 = *((_QWORD *)KeGetCurrentPrcb() + 4197);
v15[1] = _InterlockedIncrement64((volatile signed __int64 *)(v12 + 8));
*v15 = *(_QWORD *)v12;
}
else
{
return -1073741811;
}
}
else
{
v13 = *v7;
*v7 = *ActivityId;
*ActivityId = v13;
}
}
else
{
*v7 = *ActivityId;
}
}
else
{
*ActivityId = *v7;
}
return v14;
}
return -1073741637;
}Referenced by:
IoCaptureLiveDump
IoReuseIrp
IoSetActivityIdIrp
IoWriteDeferredLiveDumpData
IopInitActivityIdIrp
VrpIoctlDeviceDispatch
VrpPostEnumerateKey
VrpPostOpenOrCreate
VrpPostQueryKey
VrpPostUnloadKey
VrpPreFlushKey
VrpPreLoadKey
VrpPreOpenOrCreate
VrpPreQueryKeyName
VrpRegistryCallback