PdcTaskClientRequest

INT64 __fastcall PdcTaskClientRequest(INT64 a1, CHAR a2){
  __int64 v2; 
  int v4; 
  signed __int64 *v5; 
  int v6; 
  int v7; 
  int v8; 
  signed __int64 v9; 
  signed __int64 v10; 
  signed __int64 v11; 
  INT64 result[5]; 
  int v14; 
  bool v15; 
  v2 = PopSleepStudyTaskClientActivator;
  memset((INT64)result, 0i64);
  if( !v2 || *(_DWORD *)v2 != 1667458128 )
    return(unsigned int)-1073741585;
  v5 = (signed __int64 *)(v2 + 8);
  PdcAcquireRwLockExclusive((VOID *)(v2 + 8));
  if( a2 || *(_DWORD *)(v2 + 48) )
  {
    v6 = *(_DWORD *)(v2 + 48);
    v4 = 0;
    if( a2 )
    {
      if( v6 )
        goto LABEL_12;
    }
    else if( v6 != 1 )
    {
      goto LABEL_12;
    }
    v14 = 7;
    v15 = a2 != 0;
    PdcPortSendMessageSynchronously(*(_QWORD *)(v2 + 40), (INT64)result);
    v4 = *(_DWORD *)(v2 + 52);
    if( v4 < 0 )
      goto LABEL_16;
LABEL_12:
    v7 = *(_DWORD *)(v2 + 48);
    if( a2 )
      v8 = v7 + 1;
    else
      v8 = v7 - 1;
    *(_DWORD *)(v2 + 48) = v8;
    goto LABEL_16;
  }
  v4 = -1073741823;
LABEL_16:
  *(_QWORD *)(v2 + 16) = 0i64;
  _m_prefetchw(v5);
  v9 = *v5;
  v10 = *v5 - 16;
  if( (*v5 & 0xFFFFFFFFFFFFFFF0ui64) <= 0x10 )
    v10 = 0i64;
  if( (v9 & 2) != 0 || (v11 = *v5, v11 != _InterlockedCompareExchange64(v5, v10, v9)) )
    ExfReleasePushLock((_EX_PUSH_LOCK *__ptr32)(v2 + 8));
  KeAbPostRelease((PVOID)(v2 + 8));
  KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
  return(unsigned int)v4;
}

Referenced by:

PopPowerAggregatorSessionSwitchWorker