PdcTaskClientRequest

NTSTATUS __stdcall PdcTaskClientRequest(INT64 a1, CHAR a2){
  __int64 v2; 
  NTSTATUS v4; 
  signed __int64 *v5; 
  int v6; 
  int v7; 
  int v8; 
  signed __int64 v9; 
  signed __int64 v10; 
  signed __int64 v11; 
  INT64 v13[100]; 

  v2 = PopSleepStudyTaskClientActivator;
  memset(v13, 0i64, sizeof(v13));
  if( !PopSleepStudyTaskClientActivator || *(_DWORD *)PopSleepStudyTaskClientActivator != 1667458128 )
    return -1073741585;
  v5 = (signed __int64 *)(PopSleepStudyTaskClientActivator + 8);
  PdcAcquireRwLockExclusive((VOID *)(PopSleepStudyTaskClientActivator + 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;
    }
    LODWORD(v13[5]) = 7;
    LOBYTE(v13[7]) = a2 != 0;
    PdcPortSendMessageSynchronously(*(_QWORD *)(v2 + 40), (INT64)v13);
    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 *)(v2 + 8));
  KeAbPostRelease((VOID *)(v2 + 8));
  KeLeaveCriticalRegionThread(KeGetCurrentThread());
  return v4;
}

Referenced by:

PopPowerAggregatorSessionSwitchWorker