EmClientQueryRuleState

NTSTATUS __stdcall EmClientQueryRuleState(const _GUID *RuleId, _EM_RULE_STATE *State){
  NTSTATUS v2; 
  _EMP_RULE_DB_RECORD *v4; 
  _EMP_RULE_DB_RECORD *v5; 
  _EMP_TARGET_RULE *v6; 
  _EMP_RULE_DB_RECORD *v7; 
  volatile signed __int32 *v8; 

  v2 = 0;
  if( !RuleId || !State )
    return -1073741811;
  *State = 1;
  if( !EmpAcquirePagingReference() )
    return -1073741818;
  ExAcquirePushLockExclusiveEx(&EmpDatabaseLock, 0i64);
  EmpSearchRuleDatabase();
  v5 = v4;
  if( v4 && (v6 = EmpSearchTargetRuleList(v4), (v8 = v6) != 0i64) )
  {
    _InterlockedIncrement(v6);
    EmpUpdateRuleState(v7, 0i64);
    _InterlockedAdd(v8, 0xFFFFFFFF);
    *State = v5[4];
  }
  else
  {
    v2 = -1073741275;
  }
  if( (_InterlockedExchangeAdd64(&EmpDatabaseLock._bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock(&EmpDatabaseLock);
  KeAbPostRelease(&EmpDatabaseLock);
  EmpReleasePagingReference();
  return v2;
}

Referenced by:

HalpInterruptIsMsiSupported
KeInitializeClock
PoInitSystem
PopDirectedDripsQueryEmPS4DisableSetting
PopDirectedDripsQueryEmSettings
PopEnableHiberFile
PopHiberEvaluateSkippingMemoryMapValidation