PerfLogExecutiveResourceRelease
VOID __stdcall PerfLogExecutiveResourceRelease(
UINT64 Action,
PVOID LockAddress,
UINT64 RecursionCount,
UINT64 ContentionCount){
int v4;
unsigned int v5;
int v6;
struct _KPRCB *CurrentPrcb;
unsigned __int64 v8;
char v9;
__int16 v10;
INT64 TrackingLockSlotForThread;
INT64 v12;
unsigned __int64 v13;
__int64 v14;
unsigned int v15;
UINT64 Flag;
char v17;
__int64 v19[3];
int v20;
int v21;
PVOID v22;
int v23;
unsigned int v24;
EVENT_DATA_DESCRIPTOR EventData;
v4 = RecursionCount;
v5 = ContentionCount;
v6 = Action;
CurrentPrcb = KeGetCurrentPrcb();
v8 = __rdtsc();
v9 = *((_BYTE *)CurrentPrcb + 209);
++*((_DWORD *)CurrentPrcb + 8540);
v10 = *((unsigned __int8 *)CurrentPrcb + 208);
v17 = v9;
if( *((_QWORD *)KeGetCurrentThread() + 178) )
{
TrackingLockSlotForThread = EtwpGetTrackingLockSlotForThread((INT64)LockAddress, (unsigned int)Action & 0xFFFF0000);
v12 = TrackingLockSlotForThread;
if( TrackingLockSlotForThread )
{
if( *(_DWORD *)(TrackingLockSlotForThread + 32) )
{
++*((_DWORD *)CurrentPrcb + 8541);
if( *(_DWORD *)(TrackingLockSlotForThread + 36) < (unsigned int)(v4 + 1) )
*(_DWORD *)(TrackingLockSlotForThread + 36) = v4 + 1;
if( ((v6 - 65570) & 0xFFFFFFDF) != 0 )
{
if( ((v6 - 65586) & 0xFFFFFFDF) == 0 )
*(_DWORD *)(TrackingLockSlotForThread + 32) = 2;
return;
}
v13 = *(_QWORD *)(TrackingLockSlotForThread + 8);
if( v13 > 2 && *(_WORD *)(v12 + 24) == v10 && *(_BYTE *)(v12 + 26) == v17 )
v14 = v8 - v13;
else
v14 = 0i64;
if( *(_QWORD *)v12 > 1ui64
&& !((*((_DWORD *)CurrentPrcb + 8507) + *((_DWORD *)CurrentPrcb + 8508))
% (unsigned int)EtwpExecutiveResourceContentionSampleRate)
|| (v15 = *(_DWORD *)(v12 + 44), v5 > v15) && !((v5 - v15) % EtwpExecutiveResourceContentionSampleRate)
|| !((*((_DWORD *)CurrentPrcb + 8507) + *((_DWORD *)CurrentPrcb + 8508))
% (unsigned int)EtwpExecutiveResourceReleaseSampleRate) )
{
v22 = LockAddress;
v23 = v6;
v19[0] = *(_QWORD *)(v12 + 8);
v20 = *(_DWORD *)(v12 + 36);
v19[1] = v14;
v19[2] = *(_QWORD *)v12;
v24 = v5 - *(_DWORD *)(v12 + 44);
EventData.Reserved = 0;
EventData.Size = 48;
LODWORD(Flag) = 22026242;
v21 = *((_DWORD *)KeGetCurrentThread() + 288);
EventData.Ptr = (unsigned __int64)v19;
EtwTraceKernelEvent(&EventData, 1ui64, 0x20020000ui64, 0x52Bu, Flag);
}
}
*(_DWORD *)(v12 + 28) = 0;
}
}
}Referenced by:
No references.