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