ExpWnfLookupNameInstance

NTSTATUS __stdcall ExpWnfLookupNameInstance(
        _WNF_SCOPE_INSTANCE *ScopeInstance,
        _WNF_STATE_NAME_STRUCT StateName,
        _WNF_NAME_INSTANCE **NameInstance){
  _WNF_LOCK *p_NameSetLock; 
  _BYTE *v7; 
  _WNF_NAME_INSTANCE *v8; 
  _WNF_NAME_INSTANCE *v9; 

  p_NameSetLock = &ScopeInstance->NameSetLock;
  v7 = KeAbPreAcquire(&ScopeInstance->NameSetLock, 0i64, 0i64);
  if( _InterlockedCompareExchange64(&p_NameSetLock->PushLock._bf_0, 17i64, 0i64) )
    ExfAcquirePushLockSharedEx(&p_NameSetLock->PushLock, v7, p_NameSetLock);
  if( v7 )
    v7[26] |= 1u;
  v8 = ExpWnfFindStateName(ScopeInstance, StateName);
  v9 = v8;
  if( v8 )
    v9 = (_WNF_NAME_INSTANCE *)(-(__int64)(ExAcquireRundownProtection(&v8->RunRef) != 0) & (unsigned __int64)v8);
  if( _InterlockedCompareExchange64(&p_NameSetLock->PushLock._bf_0, 0i64, 17i64) != 17 )
    ExfReleasePushLockShared(&p_NameSetLock->PushLock);
  KeAbPostRelease(p_NameSetLock);
  if( !v9 )
    return -1073741772;
  *NameInstance = v9;
  return 0;
}

Referenced by:

ExpNtDeleteWnfStateData
ExpNtUpdateWnfStateData
ExpWnfCompleteThreadSubscriptions
ExpWnfSubscribeWnfStateChange
NtDeleteWnfStateName
NtQueryWnfStateData
NtQueryWnfStateNameInformation