PopPepUpdateDripsDeviceVetoMask

INT64 __fastcall PopPepUpdateDripsDeviceVetoMask(INT64 a1, INT64 a2){
  __int64 v2; 
  int v3; 
  INT64 *v4; 
  KIRQL v5; 
  unsigned int v6; 
  unsigned __int64 v7; 
  char DeepSleepPlatformStateIndex; 
  unsigned int *v9; 
  char v10; 
  __int64 v11; 
  _DWORD *v12; 
  unsigned int v13; 
  __int64 v14; 
  unsigned __int64 v15; 
  int v16; 
  char v17; 
  unsigned __int64 v18; 
  unsigned __int64 v19; 
  char v20; 
  INT64 result; 
  int a4; 
  v2 = *(_QWORD *)(a1 + 56);
  v3 = a2;
  a4 = 0;
  v4 = (INT64 *)(v2 + 64);
  v5 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)(v2 + 64));
  v6 = *(_DWORD *)(v2 + 144);
  *(_DWORD *)(v2 + 144) = *(_DWORD *)(v2 + 156);
  *(_DWORD *)(v2 + 148) = *(_DWORD *)(v2 + 160);
  *(_DWORD *)(v2 + 152) = *(_DWORD *)(v2 + 164);
  v7 = v5;
  DeepSleepPlatformStateIndex = PpmGetDeepSleepPlatformStateIndex();
  v10 = DeepSleepPlatformStateIndex;
  if( v3 && v3 != 1 )
  {
    v11 = (unsigned int)(v3 - 1);
    v12 = v9;
    do
    {
      *v12++ |= 1 << DeepSleepPlatformStateIndex;
      --v11;
    }
    while( v11 );
  }
  v13 = *v9;
  PopPepUpdateIdleStateRefCount(v6, *v9, 1i64);
  PopPepUpdateIdleStateRefCount(v6, v13, 0i64);
  PopPepGetMinimumDevicePowerState(v2, v10, 0, &a4, 0i64);
  v14 = *(_QWORD *)(v2 + 32) + 600i64;
  v15 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
  KxAcquireSpinLock((UINT64 *)v14);
  v16 = a4;
  v17 = *(_BYTE *)(v14 + 8);
  if( a4 == 1 )
  {
    v18 = *(_QWORD *)(v14 + 24);
    if( v17 && v15 > v18 )
    {
      v19 = v15 - v18;
      *(_QWORD *)(v14 + 128) += v19;
      *(_QWORD *)(v14 + 136) += v19;
    }
    *(_DWORD *)(v14 + 12) = 5;
    v20 = 0;
  }
  else
  {
    if( !v17 )
      *(_QWORD *)(v14 + 24) = v15;
    *(_DWORD *)(v14 + 12) = v16;
    v20 = 1;
  }
  *(_BYTE *)(v14 + 8) = v20;
  KxReleaseSpinLock((UINT64 *)v14);
  ExReleaseSpinLockExclusiveFromDpcLevel(v4);
  result = (unsigned int)KiIrqlFlags;
  __writecr8(v7);
  return result;
}

Referenced by:

PopFxUpdateVetoMaskWork