PopFxSetDeviceAccountingCsPlatformState

VOID __stdcall PopFxSetDeviceAccountingCsPlatformState(UINT64 CsPlatformIdleStateIndex){
  unsigned int v1; 
  int v2; 
  int v3; 
  _ETHREAD *CurrentThread; 
  __int64 *i; 
  __int64 v6; 
  _DEVICE_OBJECT *v7; 
  _DEVICE_POWER_STATE *v8; 
  UINT8 MinimumDevicePowerState; 
  unsigned __int64 v10; 
  char v11; 
  unsigned int v12; 
  __int64 v13; 
  INT8 MinimumComponentIdleState; 
  unsigned __int64 v15; 
  UINT64 MatchingChangeStamp; 
  UINT64 CheckStamp; 
  unsigned int PlatformIdleStateIndex; 
  char Buffer; 
  UINT64 State; 
  _DEVICE_OBJECT *Pdo; 

  PlatformIdleStateIndex = CsPlatformIdleStateIndex;
  v1 = CsPlatformIdleStateIndex;
  LODWORD(State) = 0;
  v2 = _InterlockedCompareExchange((_DWORD *)&stru_140C23628 + 1058, 0, 0);
  v3 = v2;
  if( !v2 || v2 < 0 )
  {
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    --CurrentThread->Tcb.KernelApcDisable;
    ExAcquirePushLockSharedEx((_EX_PUSH_LOCK *)&stru_140C23628 + 489, 0i64);
    for( i = (__int64 *)*(&stru_140C23628 + 485); i != (__int64 *)((char *)&stru_140C23628 + 3880); i = (__int64 *)*i )
    {
      v6 = i[6];
      if( v6 )
      {
        v7 = *(_DEVICE_OBJECT **)(v6 + 32);
        Pdo = v7;
        PopFxActivateDevice(v7, 0);
        LOBYTE(v8) = 1;
        MinimumDevicePowerState = PopPepGetMinimumDevicePowerState((PEPHANDLE *)i[7], v1, v8);
        v10 = (unsigned __int8)KeAcquireSpinLockRaiseToDpc((UINT64 *)i + 75);
        *((_DWORD *)i + 154) = v3;
        memset(i + 79, 0i64, 0xC0u);
        if( MinimumDevicePowerState && (int)State > 1 )
        {
          *((_DWORD *)i + 153) = State;
          *((_BYTE *)i + 608) = 1;
          i[78] = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
          _InterlockedOr((volatile signed __int32 *)i + 206, 0x10u);
        }
        else
        {
          i[78] = 0i64;
          *((_BYTE *)i + 608) = 0;
        }
        KxReleaseSpinLock((UINT64 *)i + 75);
        __writecr8(v10);
        v11 = 0;
        v12 = 0;
        if( !*((_DWORD *)i + 207) )
          goto LABEL_17;
        do
        {
          v13 = *(_QWORD *)(i[104] + 8i64 * v12) + 200i64;
          MinimumComponentIdleState = PopPepGetMinimumComponentIdleState(i[7], v12, PlatformIdleStateIndex, &State);
          v15 = (unsigned __int8)KeAcquireSpinLockRaiseToDpc((UINT64 *)v13);
          *(_DWORD *)(v13 + 16) = v3;
          memset((VOID *)(v13 + 32), 0i64, 0xC0u);
          if( MinimumComponentIdleState && (_DWORD)State )
          {
            v11 = 1;
            *(_DWORD *)(v13 + 12) = State;
            *(_BYTE *)(v13 + 8) = 1;
            *(_QWORD *)(v13 + 24) = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
            _InterlockedOr((volatile signed __int32 *)i + 206, 0x10u);
          }
          else
          {
            *(_BYTE *)(v13 + 8) = 0;
            *(_QWORD *)(v13 + 24) = 0i64;
          }
          KxReleaseSpinLock((UINT64 *)v13);
          __writecr8(v15);
          ++v12;
        }
        while( v12 < *((_DWORD *)i + 207) );
        v7 = Pdo;
        v1 = PlatformIdleStateIndex;
        if( v11 )
          _InterlockedOr((volatile signed __int32 *)i + 206, 0x100u);
        else
LABEL_17:
          _InterlockedAnd((volatile signed __int32 *)i + 206, 0xFFFFFEFF);
        PoFxIdleDevice(v7);
      }
    }
    if( _InterlockedCompareExchange64((_QWORD *)&stru_140C23628 + 489, 0i64, 17i64) != 17 )
      ExfReleasePushLockShared((_EX_PUSH_LOCK *)&stru_140C23628 + 489);
    KeAbPostRelease((char *)&stru_140C23628 + 3912);
    KeLeaveCriticalRegionThread(KeGetCurrentThread());
    LODWORD(CheckStamp) = 0;
    LODWORD(MatchingChangeStamp) = 0;
    Buffer = 1;
    ZwUpdateWnfStateData(
      &WNF_PO_DRIPS_DEVICE_CONSTRAINTS_REGISTERED,
      &Buffer,
      1ui64,
      0i64,
      0i64,
      MatchingChangeStamp,
      CheckStamp);
  }
}

Referenced by:

PopFxEnablePlatformStates