PopPepUpdateDripsDeviceVetoMask

NTSTATUS __fastcall PopPepUpdateDripsDeviceVetoMask(INT64 a1, INT64 a2){
  __int64 v2; 
  int v3; 
  INT64 *v4; 
  unsigned __int8 v5; 
  unsigned int v6; 
  unsigned __int64 v7; 
  unsigned int DeepSleepPlatformStateIndex; 
  unsigned int *v9; 
  unsigned int v10; 
  __int64 v11; 
  _DWORD *v12; 
  unsigned int v13; 
  __int64 v14; 
  __int64 v15; 
  NTSTATUS result; 

  v2 = *(_QWORD *)(a1 + 56);
  v3 = a2;
  v4 = (INT64 *)(v2 + 64);
  v5 = ExAcquireSpinLockExclusive((INT64 *)(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, UpdateTypeIncrement);
  PopPepUpdateIdleStateRefCount(v6, v13, UpdateTypeDecrement);
  PopPepGetMinimumDevicePowerState((PEPHANDLE *)v2, v10, 0i64);
  v14 = *(_QWORD *)(v2 + 32) + 600i64;
  v15 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
  KxAcquireSpinLock((UINT64 *)v14);
  if( !*(_BYTE *)(v14 + 8) )
    *(_QWORD *)(v14 + 24) = v15;
  *(_DWORD *)(v14 + 12) = 0;
  *(_BYTE *)(v14 + 8) = 1;
  KxReleaseSpinLock((UINT64 *)v14);
  ExReleaseSpinLockExclusiveFromDpcLevel(v4);
  result = KiIrqlFlags;
  __writecr8(v7);
  return result;
}

Referenced by:

PopFxUpdateVetoMaskWork