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.