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