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