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