PopDiagTraceDeepSleepConstraintRundown

VOID __fastcall PopDiagTraceDeepSleepConstraintRundown(INT64 a1, INT64 a2, EVENT_DESCRIPTOR *a3){
  unsigned __int16 v3; 
  UINT64 v4; 
  unsigned int v5; 
  int v6; 
  unsigned __int64 v7; 
  unsigned __int64 v8; 
  int v9; 
  bool v10; 
  int *v11; 
  __int64 v12; 
  UINT64 UserDataCount; 
  unsigned __int16 v14; 
  int v15[10]; 
  EVENT_DATA_DESCRIPTOR UserData; 
  __int64 v17[20]; 
  v3 = 0;
  if( PopDiagHandleRegistered
    && EtwEventEnabled(PopDiagHandle, (EVENT_DESCRIPTOR *)&POP_ETW_DEEP_SLEEP_CONSTRAINT_RUNDOWN, a3) )
  {
    KeAcquireSpinLockRaiseToDpc(&PopDeepSleepDisengageReasonLock, v4);
    v5 = PopDeepSleepDisengageReasonMask;
    v7 = (unsigned __int8)v6;
    *(_QWORD *)&UserData.Size = 2i64;
    v8 = (unsigned int)PopDeepSleepDisengageReasonMask
       - (((unsigned __int64)(unsigned int)PopDeepSleepDisengageReasonMask >> 1) & 0x5555555555555555i64);
    v14 = (0x101010101010101i64
         * (((v8 & 0x3333333333333333i64)
           + ((v8 >> 2) & 0x3333333333333333i64)
           + (((v8 & 0x3333333333333333i64) + ((v8 >> 2) & 0x3333333333333333i64)) >> 4)) & 0xF0F0F0F0F0F0F0Fi64)) >> 56;
    v9 = v14 + 1;
    UserData.Ptr = (unsigned __int64)&v14;
    v10 = !_BitScanForward((unsigned int *)&v6, PopDeepSleepDisengageReasonMask);
    v15[0] = v6;
    if( !v10 )
    {
      v11 = v15;
      do
      {
        v5 &= v5 - 1;
        v12 = 2i64 * v3++;
        v17[v12] = (__int64)v11;
        v17[v12 + 1] = 4i64;
        v11 = &v15[v3];
        v10 = !_BitScanForward((unsigned int *)&v12, v5);
        *v11 = v12;
      }
      while( !v10 );
    }
    LODWORD(UserDataCount) = v9;
    EtwWriteEx(
      PopDiagHandle,
      (EVENT_DESCRIPTOR *)&POP_ETW_DEEP_SLEEP_CONSTRAINT_RUNDOWN,
      0i64,
      0i64,
      0i64,
      0i64,
      UserDataCount,
      &UserData);
    KxReleaseSpinLock(&PopDeepSleepDisengageReasonLock);
    __writecr8(v7);
  }
}

Referenced by:

PopDiagTraceControlCallback