PopDripsWatchdogDiagnosticWorker

VOID __stdcall PopDripsWatchdogDiagnosticWorker(ERESOURCE *Resource){
  unsigned int *p_ActiveEntries; 
  _ETHREAD *CurrentThread; 
  UINT64 *v4; 
  INT64 v5; 
  EVENT_DESCRIPTOR *v6; 
  unsigned __int8 v7; 
  _LIST_ENTRY *Flink; 
  unsigned int v9; 
  _OWNER_ENTRY OwnerEntry; 
  unsigned int NumberOfSharedWaiters; 
  __int64 v12; 
  int Flink_high; 
  int OwnerTable; 
  _ETHREAD *v15; 
  int a6; 
  int a4; 
  INT64 a2; 
  INT64 a3[2]; 
  __int128 v20; 
  INT64 v21[2]; 
  __int64 v22; 
  unsigned int v23; 
  p_ActiveEntries = &Resource[3].ActiveEntries;
  v22 = 0i64;
  v23 = 0;
  *(_OWORD *)v21 = 0i64;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  *(_OWORD *)a3 = 0i64;
  --*((_WORD *)CurrentThread + 242);
  v20 = 0i64;
  ExAcquireResourceExclusiveLite(Resource, 1u);
  if( ((__int64)Resource[1].SystemResourcesList.Flink & 4) != 0 && (p_ActiveEntries[45] & 2) != 0 )
  {
    ++LODWORD(Resource[6].OwnerTable);
    v5 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
    a4 = 0;
    a2 = 0i64;
    a6 = 0;
    PopCalculateIdleInformation((INT64)a3, v4);
    PopDripsWatchdogUpdateMetrics((INT64)Resource, v5, (INT64)a3, &a4, &a2, &a6);
    v6 = 0i64;
    v7 = 0;
    if( (_QWORD)v20 != -1i64 )
    {
      Flink = Resource[6].SystemResourcesList.Flink;
      if( Flink != (_LIST_ENTRY *)-1i64 )
      {
        v7 = 1;
        v6 = (EVENT_DESCRIPTOR *)(v20 - (_QWORD)Flink);
      }
    }
    v9 = p_ActiveEntries[45];
    if( (v9 & 4) == 0 )
    {
      OwnerEntry = Resource[5].OwnerEntry;
      NumberOfSharedWaiters = Resource[5].NumberOfSharedWaiters;
      v12 = *(_QWORD *)&Resource[5].ActiveEntries;
      Flink_high = HIDWORD(Resource[1].SystemResourcesList.Flink);
      OwnerTable = (int)Resource[6].OwnerTable;
      p_ActiveEntries[45] = v9 | 4;
      *(_OWNER_ENTRY *)v21 = OwnerEntry;
      v23 = NumberOfSharedWaiters;
      v22 = v12;
      PopDripsWatchdogScheduleNextTimer((__int64)p_ActiveEntries);
      ExReleaseResourceLite(Resource);
      KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
      if( a6 )
      {
        if( !a4 && PopDeepSleepEnabled() )
          PopDeepSleepWatchdogTakeAction((INT64)v21, Flink_high);
      }
      else if( !qword_140C4FC98 )
      {
        PopDripsWatchdogTakeAction((__int64)v21, Flink_high, OwnerTable);
      }
      PopDiagTraceCsDripsDivergence(v7, a2, v6);
      if( v7 )
        PopDripsWatchdogCheckHwDivergence((UINT64)v6, a2);
      v15 = (_ETHREAD *)KeGetCurrentThread();
      --*((_WORD *)v15 + 242);
      ExAcquireResourceExclusiveLite(Resource, 1u);
      p_ActiveEntries[45] &= ~4u;
    }
  }
  ExReleaseResourceLite(Resource);
  KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
}

Referenced by:

No references.