EmClientRuleEvaluate
__int64 __fastcall EmClientRuleEvaluate(_QWORD *a1, __int64 a2, int a3, _DWORD *a4){
unsigned int v4;
SINGLE_LIST_ENTRY *v9;
_QWORD *v10;
__int64 v11;
v4 = 0;
if( a1 && a2 && a4 && a3 )
{
*a4 = 1;
if( EmpAcquirePagingReference() )
{
ExAcquirePushLockExclusiveEx((UINT64)&EmpDatabaseLock, 0i64);
v9 = EmpSearchRuleDatabase((const GUID *)a1);
if( v9 && (v10 = EmpSearchTargetRuleList((__int64)v9)) != 0i64 )
{
if( a3 == *(_DWORD *)(v11 + 48) )
*a4 = EmpEvaluateTargetRule((__int64)v10, a2, a3);
else
v4 = -1073741811;
}
else
{
v4 = -1073741275;
}
if( (_InterlockedExchangeAdd64((volatile signed __int64 *)&EmpDatabaseLock, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock((volatile INT64 *)&EmpDatabaseLock);
KeAbPostRelease(&EmpDatabaseLock);
EmpReleasePagingReference();
}
else
{
return(unsigned int)-1073741818;
}
}
else
{
return(unsigned int)-1073741811;
}
return v4;
}Referenced by:
PoRegisterPowerSettingCallback
PopPepInitializeVetoMasks
PopReadErrataSkipMemoryOverwriteRequestControlLockAction