PopDripsWatchdogStartWatchdog

VOID __stdcall PopDripsWatchdogStartWatchdog(){
  INT64 v0; 
  _ETHREAD *CurrentThread; 
  UINT64 *v2; 
  signed __int32 v3; 
  signed __int32 v4; 
  __int64 v5; 
  __int64 v6; 
  __int128 v7; 
  __int128 v8; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v7 = 0i64;
  v8 = 0i64;
  --CurrentThread->Tcb.KernelApcDisable;
  ExAcquireResourceExclusiveLite((UINT64)&PopIrpWorkerControlEvent + 2016, 1, v0);
  if( (*(&PopIrpWorkerControlEvent + 2120) & 2) != 0 )
  {
    _m_prefetchw(&PopDirectedDripsUmTestDeviceCount);
    v3 = PopDirectedDripsUmTestDeviceCount;
    do
    {
      v4 = v3;
      v3 = _InterlockedCompareExchange(&PopDirectedDripsUmTestDeviceCount, v3, v3);
    }
    while( v4 != v3 );
    if( !v3 )
    {
      v5 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
      PopCalculateIdleInformation((__int64)&v7, v2);
      v6 = PopWdiCurrentScenarioInstanceId;
      if( (*(&PopIrpWorkerControlEvent + 2308) & 1) != 0 )
      {
        *(&PopIrpWorkerControlEvent + 581) = 0;
        *(&PopIrpWorkerControlEvent + 289) = 0i64;
        *(_OWORD *)((char *)&PopIrpWorkerControlEvent + 2360) = v7;
        *(&PopIrpWorkerControlEvent + 582) = *(&PopIrpWorkerControlEvent + 668);
        *(&PopIrpWorkerControlEvent + 292) = v5;
        *(&PopIrpWorkerControlEvent + 293) = v5;
        *(_OWORD *)((char *)&PopIrpWorkerControlEvent + 2376) = v8;
        PopDripsWatchdogScheduleNextTimer((_KTIMER2 *)((char *)&PopIrpWorkerControlEvent + 2128));
      }
      if( (*(&PopIrpWorkerControlEvent + 2572) & 1) != 0 )
      {
        memset((char *)&PopIrpWorkerControlEvent + 2576, 0i64, 0x50u);
        *(&PopIrpWorkerControlEvent + 653) = HIDWORD(qword_140C23560);
        *(&PopIrpWorkerControlEvent + 164) = v7;
        *(&PopIrpWorkerControlEvent + 327) = qword_140C4FCA8;
        *(&PopIrpWorkerControlEvent + 165) = v8;
        PopDripsWatchdogScheduleNextTimer((_KTIMER2 *)((char *)&PopIrpWorkerControlEvent + 2392));
      }
      *(&PopIrpWorkerControlEvent + 530) |= 4u;
      *(&PopIrpWorkerControlEvent + 333) = v6;
    }
  }
  ExReleaseResourceLite((PERESOURCE)((char *)&PopIrpWorkerControlEvent + 2016));
  KeLeaveCriticalRegionThread(KeGetCurrentThread());
}

Referenced by:

PopPdcIdleResiliencyCallback