EtwActivityIdControl
NTSTATUS __stdcall EtwActivityIdControl(UINT64 ControlCode, _GUID *ActivityId){
volatile signed __int64 *EtwSupport;
_ETHREAD *CurrentThread;
char *Teb;
_EWOW64PROCESS *WoW64Process;
_GUID *v7;
int v8;
unsigned __int16 Machine;
int v10;
int v11;
volatile signed __int64 *v12;
_GUID v13;
NTSTATUS v14;
volatile signed __int64 *v15;
v14 = 0;
if( (_DWORD)ControlCode == 3 )
{
EtwSupport = (volatile signed __int64 *)KeGetCurrentPrcb()->EtwSupport;
*(_QWORD *)ActivityId->Data4 = _InterlockedIncrement64(EtwSupport + 1);
*(_QWORD *)&ActivityId->Data1 = *EtwSupport;
return v14;
}
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
if( (CurrentThread->Tcb._bf_0 & 0x400) != 0 || CurrentThread->Tcb.ApcStateIndex == 1 )
Teb = 0i64;
else
Teb = (char *)CurrentThread->Tcb.Teb;
if( Teb )
{
v15 = (volatile signed __int64 *)(Teb + 5904);
WoW64Process = KeGetCurrentThread()->ApcState.Process->WoW64Process;
if( WoW64Process && ((Machine = WoW64Process->Machine, Machine == 332) || Machine == 452) )
{
v7 = (_GUID *)(Teb + 12112);
v15 = (volatile signed __int64 *)(Teb + 12112);
}
else
{
v7 = (_GUID *)(Teb + 5904);
}
v8 = ControlCode - 1;
if( v8 )
{
v10 = v8 - 1;
if( v10 )
{
v11 = v10 - 2;
if( v11 )
{
if( v11 == 1 )
{
*ActivityId = *v7;
v12 = (volatile signed __int64 *)KeGetCurrentPrcb()->EtwSupport;
*((_QWORD *)v15 + 1) = _InterlockedIncrement64(v12 + 1);
*v15 = *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