PopPepInitializeVetoMasks

VOID __stdcall PopPepInitializeVetoMasks(_POP_PEP_DEVICE *Device, UINT64 PlatformStateCount){
  __int64 v2; 
  __int64 v4; 
  int v5; 
  char v6; 
  __int64 v7; 
  __int128 v8; 
  char *v9; 
  unsigned int i; 
  _DEVICE_POWER_STATE v11; 
  unsigned __int64 v12; 
  _DEVICE_POWER_STATE *v13; 
  unsigned __int8 v14; 
  __int64 v15; 
  int v16; 
  __int64 v17; 
  _DEVICE_POWER_STATE v18; 
  _DEVICE_POWER_STATE *v19; 
  int v20; 
  ULONG_PTR v21; 
  __int64 v22; 
  _DEVICE_POWER_STATE *v23; 
  unsigned int v24; 
  unsigned int v25; 
  __int64 v26; 
  _POP_PEP_DEVICE v27; 
  __int64 v28; 
  char v29; 
  ULONG_PTR v30; 
  __int64 v31; 
  __int64 v32; 
  _DEVICE_POWER_STATE *v33; 
  int v34; 
  ULONG_PTR v35; 
  _POP_PEP_DEVICE *v36; 
  _DEVICE_POWER_STATE *v37; 
  __int64 v38; 
  _DEVICE_POWER_STATE v39; 
  _DWORD *v40; 
  UINT8 v41; 
  char v42; 
  unsigned __int8 v43; 
  INT64 UpdatedAccountingLevel; 
  int DeepSleepPlatformStateIndex; 
  __int128 *v46; 
  _POP_PEP_DEVICE *v47; 
  _DEVICE_OBJECT *Pdo; 
  __int128 v49; 
  _QWORD v50[20]; 
  _DEVICE_POWER_STATE MinimumDStates[32]; 

  v2 = (unsigned int)PlatformStateCount;
  HIDWORD(UpdatedAccountingLevel) = 0;
  v49 = 0i64;
  memset(v50, 0i64, 0x98u);
  v4 = *((_QWORD *)Device + 4);
  v46 = 0i64;
  if( *(_QWORD *)(v4 + 48) )
  {
    v5 = v50[3];
    v7 = (v6 + 120) & 4;
    *((_BYTE *)Device + 384) = 0;
    v8 = *(_OWORD *)(v4 + 216);
    v9 = (char *)&v50[3];
    if( ((v6 + 120) & 4) != 0 )
      v5 = 1;
    LODWORD(v50[3]) = v5;
    if( ((v6 + 120) & 4) != 0 )
      v9 = (char *)&v50[3] + 4;
    *(_OWORD *)&v50[1] = v8;
    memset64(v9, 0x100000001ui64, 16i64 - ((unsigned int)v7 != 0i64));
    if( ((v6 + 120) & 4) != 0 )
      *(_DWORD *)&v9[(-(__int64)(v7 != 0) & 0xFFFFFFFFFFFFFFFCui64) + 124] = 1;
    for( i = 0; i < (unsigned int)v2; ++i )
    {
      LODWORD(v50[0]) = i;
      *(_QWORD *)&v49 = v50;
      DWORD2(v49) = 8;
      v46 = &v49;
      EmClientRuleEvaluate(
        (__int64)&GUID_EM_PEP_UPADTE_DEVICE_CONTRAINT,
        (__int64)&v46,
        1,
        (_DWORD *)&UpdatedAccountingLevel + 1);
      if( HIDWORD(UpdatedAccountingLevel) == 2 )
        *((_BYTE *)Device + 384) = 1;
    }
    Pdo = *(_DEVICE_OBJECT **)(*(_QWORD *)(v4 + 48) + 32i64);
    PopFxActivateDevice(Pdo, 0);
    v11 = MinimumDStates[0];
    v12 = (unsigned __int64)MinimumDStates & 4;
    v13 = MinimumDStates;
    if( ((unsigned __int8)MinimumDStates & 4) != 0 )
      v11 = PowerDeviceD0;
    MinimumDStates[0] = v11;
    if( ((unsigned __int8)MinimumDStates & 4) != 0 )
      v13 = &MinimumDStates[1];
    memset64(v13, 0x100000001ui64, 16i64 - ((unsigned int)v12 != 0i64));
    if( ((unsigned __int8)MinimumDStates & 4) != 0 )
      *(_DEVICE_POWER_STATE *)((char *)v13 + (-(__int64)(v12 != 0) & 0xFFFFFFFFFFFFFFFCui64) + 124) = PowerDeviceD0;
    v14 = ExAcquireSpinLockExclusive((INT64 *)Device + 8);
    v43 = v14;
    v15 = 0i64;
    DeepSleepPlatformStateIndex = PpmGetDeepSleepPlatformStateIndex();
    v41 = 0;
    LODWORD(UpdatedAccountingLevel) = _InterlockedCompareExchange((_DWORD *)&stru_140C23628 + 1058, 0, 0);
    v16 = UpdatedAccountingLevel;
    KxAcquireSpinLock((UINT64 *)(v4 + 600));
    *(_DWORD *)(v4 + 616) = UpdatedAccountingLevel;
    memset((VOID *)(v4 + 632), 0i64, 0xC0u);
    *(_BYTE *)(v4 + 608) = 0;
    if( PopPluginRequestDeviceIdleConstraints(*((_POP_FX_DEVICE **)Device + 4), MinimumDStates, (unsigned int)v2)
      || *((_BYTE *)Device + 384) )
    {
      v41 = PopFxEnableEnhancedAccounting(&UpdatedAccountingLevel);
      if( *((_BYTE *)Device + 384) && (_DWORD)v2 )
      {
        v17 = 0i64;
        v15 = v2;
        do
        {
          v18 = *(_DWORD *)((char *)&v50[3] + v17 * 4);
          if( MinimumDStates[v17] < (unsigned int)v18 )
            MinimumDStates[v17] = v18;
          ++v17;
          --v15;
        }
        while( v15 );
      }
      v19 = MinimumDStates;
      v20 = 1;
      v21 = v15;
      if( (_DWORD)v2 )
      {
        v22 = v15;
        v23 = MinimumDStates;
        do
        {
          if( *(_BYTE *)(v22 + PopPepPlatformState + 57) == (_BYTE)v15 && *v23 != PowerDeviceD0 )
            PopFxBugCheck(0x620u, v4, v21, 0);
          v24 = *v19;
          v25 = 1;
          do
          {
            if( v25 >= v24 )
              break;
            v26 = v25++ - 1;
            Device[v26 + 36] |= v20;
          }
          while( v25 <= 3 );
          if( DeepSleepPlatformStateIndex != -1 && v21 == DeepSleepPlatformStateIndex && v24 > 1 )
          {
            *(_DWORD *)(v4 + 612) = v24;
            *(_QWORD *)(v4 + 624) = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
            *(_BYTE *)(v4 + 608) = 1;
            _InterlockedOr((volatile signed __int32 *)(v4 + 824), 0x10u);
          }
          ++v19;
          v20 *= 2;
          ++v21;
          v22 += 384i64;
          ++v23;
          LODWORD(v15) = 0;
        }
        while( v21 < (unsigned int)v2 );
      }
      v27 = Device[38];
      v16 = UpdatedAccountingLevel;
      *(_QWORD *)(Device + 39) = *((_QWORD *)Device + 18);
      Device[41] = v27;
    }
    *(_DWORD *)(v4 + 616) = v16;
    KxReleaseSpinLock((UINT64 *)(v4 + 600));
    v28 = Device[42];
    if( (_DWORD)v28 != 4 )
      PopPepUpdateIdleStateRefCount(0i64, (unsigned int)Device[v28 + 35], UpdateTypeIncrement);
    v29 = *((_BYTE *)Device + 124);
    if( v29 )
    {
      v30 = v15;
      v42 = v15;
      if( Device[45] > (unsigned int)v15 )
      {
        while( 1 )
        {
          v47 = &Device[50 * v30];
          v31 = *(_QWORD *)(*(_QWORD *)(v4 + 832) + 8i64 * v30);
          memset(MinimumDStates, 0i64, sizeof(MinimumDStates));
          v32 = v31 + 200;
          KxAcquireSpinLock((UINT64 *)v32);
          *(_DWORD *)(v32 + 16) = v16;
          memset((VOID *)(v32 + 32), 0i64, 0xC0u);
          *(_BYTE *)(v32 + 8) = 0;
          if( PopPluginRequestComponentIdleConstraints(
                 *((_POP_FX_DEVICE **)Device + 4),
                 v30,
                 (UINT64 *)MinimumDStates,
                 (unsigned int)v2) )
          {
            v41 = PopFxEnableEnhancedAccounting(&UpdatedAccountingLevel);
            v33 = MinimumDStates;
            v34 = 1;
            v35 = 0;
            if( (_DWORD)v2 )
            {
              v36 = v47;
              v37 = MinimumDStates;
              v38 = 0i64;
              do
              {
                if( !*(_BYTE *)(v38 + PopPepPlatformState + 57) && *v37 )
                  PopFxBugCheck(0x621u, v4, v30, v35);
                v39 = PowerDeviceUnspecified;
                if( v36[93] )
                {
                  v40 = (_DWORD *)(*((_QWORD *)v36 + 47) + 16i64);
                  do
                  {
                    if( (unsigned int)v39 >= *v33 )
                      break;
                    *v40 |= v34;
                    ++v39;
                    v40 += 6;
                  }
                  while( v39 < (unsigned int)v36[93] );
                }
                if( DeepSleepPlatformStateIndex != -1 && v35 == DeepSleepPlatformStateIndex && *v33 )
                {
                  *(_DEVICE_POWER_STATE *)(v32 + 12) = *v33;
                  *(_QWORD *)(v32 + 24) = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
                  *(_BYTE *)(v32 + 8) = 1;
                  v42 = 1;
                  _InterlockedOr((volatile signed __int32 *)(v4 + 824), 0x10u);
                }
                ++v33;
                v34 *= 2;
                ++v35;
                v38 += 384i64;
                ++v37;
              }
              while( v35 < (unsigned int)v2 );
            }
            v16 = UpdatedAccountingLevel;
          }
          *(_DWORD *)(v32 + 16) = v16;
          KxReleaseSpinLock((UINT64 *)v32);
          PopPepUpdateIdleStateRefCount(
            0i64,
            *(unsigned int *)(*((_QWORD *)v47 + 47) + 24i64 * (unsigned int)v47[90] + 16),
            UpdateTypeIncrement);
          LOBYTE(v15) = 0;
          if( v42 )
            _InterlockedOr((volatile signed __int32 *)(v4 + 824), 0x100u);
          else
            _InterlockedAnd((volatile signed __int32 *)(v4 + 824), 0xFFFFFEFF);
          if( ++v30 >= Device[45] )
            break;
          v16 = UpdatedAccountingLevel;
        }
        v29 = *((_BYTE *)Device + 124);
      }
      v14 = v43;
      if( v29 )
        goto LABEL_70;
    }
    if( *((_BYTE *)Device + 384) != (_BYTE)v15 )
LABEL_70:
      Device[43] = 2;
    ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)Device + 8);
    __writecr8(v14);
    PoFxIdleDevice(Pdo);
    if( v41 != (_BYTE)v15 )
      PopPepResetDeviceAccountingLevel();
  }
  else if( (*(_DWORD *)(v4 + 824) & 2) != 0 )
  {
    PopPepInitializeDebuggerMasks(Device, (unsigned int)v2);
  }
}

Referenced by:

PopPepDeviceStarted
PopPepPlatformStateRegistered