in network/trans/WFPSampler/lib/HelperFunctions_FwpmFilter.cpp [653:1288]
BOOLEAN HlprFwpmFilterConditionIsValidForLayer(_In_ const GUID* pLayerKey,
_In_ const GUID* pConditionKey)
{
ASSERT(pLayerKey);
ASSERT(pConditionKey);
BOOLEAN isValid = FALSE;
if(*pLayerKey == FWPM_LAYER_INBOUND_IPPACKET_V4 ||
*pLayerKey == FWPM_LAYER_INBOUND_IPPACKET_V4_DISCARD ||
*pLayerKey == FWPM_LAYER_INBOUND_IPPACKET_V6 ||
*pLayerKey == FWPM_LAYER_INBOUND_IPPACKET_V6_DISCARD)
{
for(UINT32 conditionIndex = 0;
conditionIndex < INBOUND_IPPACKET_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionInboundIPPacket[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
else if(*pLayerKey == FWPM_LAYER_OUTBOUND_IPPACKET_V4 ||
*pLayerKey == FWPM_LAYER_OUTBOUND_IPPACKET_V4_DISCARD ||
*pLayerKey == FWPM_LAYER_OUTBOUND_IPPACKET_V6 ||
*pLayerKey == FWPM_LAYER_OUTBOUND_IPPACKET_V6_DISCARD)
{
for(UINT32 conditionIndex = 0;
conditionIndex < OUTBOUND_IPPACKET_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionOutboundIPPacket[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
else if(*pLayerKey == FWPM_LAYER_IPFORWARD_V4 ||
*pLayerKey == FWPM_LAYER_IPFORWARD_V4_DISCARD ||
*pLayerKey == FWPM_LAYER_IPFORWARD_V6 ||
*pLayerKey == FWPM_LAYER_IPFORWARD_V6_DISCARD)
{
for(UINT32 conditionIndex = 0;
conditionIndex < IPFORWARD_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionIPForward[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
else if(*pLayerKey == FWPM_LAYER_INBOUND_TRANSPORT_V4 ||
*pLayerKey == FWPM_LAYER_INBOUND_TRANSPORT_V4_DISCARD ||
*pLayerKey == FWPM_LAYER_INBOUND_TRANSPORT_V6 ||
*pLayerKey == FWPM_LAYER_INBOUND_TRANSPORT_V6_DISCARD)
{
for(UINT32 conditionIndex = 0;
conditionIndex < INBOUND_TRANSPORT_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionInboundTransport[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
else if(*pLayerKey == FWPM_LAYER_OUTBOUND_TRANSPORT_V4 ||
*pLayerKey == FWPM_LAYER_OUTBOUND_TRANSPORT_V4_DISCARD ||
*pLayerKey == FWPM_LAYER_OUTBOUND_TRANSPORT_V6 ||
*pLayerKey == FWPM_LAYER_OUTBOUND_TRANSPORT_V6_DISCARD)
{
for(UINT32 conditionIndex = 0;
conditionIndex < OUTBOUND_TRANSPORT_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionOutboundTransport[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
else if(*pLayerKey == FWPM_LAYER_STREAM_V4 ||
*pLayerKey == FWPM_LAYER_STREAM_V4_DISCARD ||
*pLayerKey == FWPM_LAYER_STREAM_V6 ||
*pLayerKey == FWPM_LAYER_STREAM_V6_DISCARD)
{
for(UINT32 conditionIndex = 0;
conditionIndex < STREAM_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionStream[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
else if(*pLayerKey == FWPM_LAYER_DATAGRAM_DATA_V4 ||
*pLayerKey == FWPM_LAYER_DATAGRAM_DATA_V4_DISCARD ||
*pLayerKey == FWPM_LAYER_DATAGRAM_DATA_V6 ||
*pLayerKey == FWPM_LAYER_DATAGRAM_DATA_V6_DISCARD)
{
for(UINT32 conditionIndex = 0;
conditionIndex < DATAGRAM_DATA_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionDatagramData[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
else if(*pLayerKey == FWPM_LAYER_INBOUND_ICMP_ERROR_V4 ||
*pLayerKey == FWPM_LAYER_INBOUND_ICMP_ERROR_V4_DISCARD ||
*pLayerKey == FWPM_LAYER_INBOUND_ICMP_ERROR_V6 ||
*pLayerKey == FWPM_LAYER_INBOUND_ICMP_ERROR_V6_DISCARD)
{
for(UINT32 conditionIndex = 0;
conditionIndex < INBOUND_ICMP_ERROR_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionInboundICMPError[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
else if(*pLayerKey == FWPM_LAYER_OUTBOUND_ICMP_ERROR_V4 ||
*pLayerKey == FWPM_LAYER_OUTBOUND_ICMP_ERROR_V4_DISCARD ||
*pLayerKey == FWPM_LAYER_OUTBOUND_ICMP_ERROR_V6 ||
*pLayerKey == FWPM_LAYER_OUTBOUND_ICMP_ERROR_V6_DISCARD)
{
for(UINT32 conditionIndex = 0;
conditionIndex < OUTBOUND_ICMP_ERROR_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionOutboundICMPError[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
else if(*pLayerKey == FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V4 ||
*pLayerKey == FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V4_DISCARD ||
*pLayerKey == FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V6 ||
*pLayerKey == FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V6_DISCARD)
{
for(UINT32 conditionIndex = 0;
conditionIndex < ALE_RESOURCE_ASSIGNMENT_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionALEResourceAssignment[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
else if(*pLayerKey == FWPM_LAYER_ALE_AUTH_LISTEN_V4 ||
*pLayerKey == FWPM_LAYER_ALE_AUTH_LISTEN_V4_DISCARD ||
*pLayerKey == FWPM_LAYER_ALE_AUTH_LISTEN_V6 ||
*pLayerKey == FWPM_LAYER_ALE_AUTH_LISTEN_V6_DISCARD)
{
for(UINT32 conditionIndex = 0;
conditionIndex < ALE_AUTH_LISTEN_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionALEAuthListen[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
else if(*pLayerKey == FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V4 ||
*pLayerKey == FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V4_DISCARD ||
*pLayerKey == FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V6 ||
*pLayerKey == FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V6_DISCARD)
{
for(UINT32 conditionIndex = 0;
conditionIndex < ALE_AUTH_RECV_ACCEPT_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionALEAuthRecvAccept[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
else if(*pLayerKey == FWPM_LAYER_ALE_AUTH_CONNECT_V4 ||
*pLayerKey == FWPM_LAYER_ALE_AUTH_CONNECT_V4_DISCARD ||
*pLayerKey == FWPM_LAYER_ALE_AUTH_CONNECT_V6 ||
*pLayerKey == FWPM_LAYER_ALE_AUTH_CONNECT_V6_DISCARD)
{
for(UINT32 conditionIndex = 0;
conditionIndex < ALE_AUTH_CONNECT_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionALEAuthConnect[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
else if(*pLayerKey == FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4 ||
*pLayerKey == FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4_DISCARD ||
*pLayerKey == FWPM_LAYER_ALE_FLOW_ESTABLISHED_V6 ||
*pLayerKey == FWPM_LAYER_ALE_FLOW_ESTABLISHED_V6_DISCARD)
{
for(UINT32 conditionIndex = 0;
conditionIndex < ALE_FLOW_ESTABLISHED_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionALEFlowEstablished[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
else if(*pLayerKey == FWPM_LAYER_IPSEC_KM_DEMUX_V4 ||
*pLayerKey == FWPM_LAYER_IPSEC_KM_DEMUX_V6)
{
for(UINT32 conditionIndex = 0;
conditionIndex < IPSEC_KM_DEMUX_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionIPsecKMDemux[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
else if(*pLayerKey == FWPM_LAYER_IPSEC_V4 ||
*pLayerKey == FWPM_LAYER_IPSEC_V6)
{
for(UINT32 conditionIndex = 0;
conditionIndex < IPSEC_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionIPsec[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
else if(*pLayerKey == FWPM_LAYER_IKEEXT_V4 ||
*pLayerKey == FWPM_LAYER_IKEEXT_V6)
{
for(UINT32 conditionIndex = 0;
conditionIndex < IKEEXT_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionIKEExt[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
else if(*pLayerKey == FWPM_LAYER_RPC_UM)
{
for(UINT32 conditionIndex = 0;
conditionIndex < RPC_UM_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionRPCUM[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
else if(*pLayerKey == FWPM_LAYER_RPC_EPMAP)
{
for(UINT32 conditionIndex = 0;
conditionIndex < RPC_EPMAP_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionRPCEPMap[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
else if(*pLayerKey == FWPM_LAYER_RPC_EP_ADD)
{
for(UINT32 conditionIndex = 0;
conditionIndex < RPC_EP_ADD_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionRPCEPAdd[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
else if(*pLayerKey == FWPM_LAYER_RPC_PROXY_CONN)
{
for(UINT32 conditionIndex = 0;
conditionIndex < RPC_PROXY_CONN_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionRPCProxyConn[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
else if(*pLayerKey == FWPM_LAYER_RPC_PROXY_IF)
{
for(UINT32 conditionIndex = 0;
conditionIndex < RPC_PROXY_IF_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionRPCProxyIf[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
#if(NTDDI_VERSION >= NTDDI_WIN7)
else if(*pLayerKey == FWPM_LAYER_NAME_RESOLUTION_CACHE_V4 ||
*pLayerKey == FWPM_LAYER_NAME_RESOLUTION_CACHE_V6)
{
for(UINT32 conditionIndex = 0;
conditionIndex < NAME_RESOLUTION_CACHE_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionNameResolutionCache[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
else if(*pLayerKey == FWPM_LAYER_ALE_RESOURCE_RELEASE_V4 ||
*pLayerKey == FWPM_LAYER_ALE_RESOURCE_RELEASE_V6)
{
for(UINT32 conditionIndex = 0;
conditionIndex < ALE_RESOURCE_RELEASE_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionALEResourceRelease[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
else if(*pLayerKey == FWPM_LAYER_ALE_ENDPOINT_CLOSURE_V4 ||
*pLayerKey == FWPM_LAYER_ALE_ENDPOINT_CLOSURE_V6)
{
for(UINT32 conditionIndex = 0;
conditionIndex < ALE_ENDPOINT_CLOSURE_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionALEEndpointClosure[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
else if(*pLayerKey == FWPM_LAYER_ALE_CONNECT_REDIRECT_V4 ||
*pLayerKey == FWPM_LAYER_ALE_CONNECT_REDIRECT_V6)
{
for(UINT32 conditionIndex = 0;
conditionIndex < ALE_CONNECT_REDIRECT_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionALEConnectRedirect[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
else if(*pLayerKey == FWPM_LAYER_ALE_BIND_REDIRECT_V4 ||
*pLayerKey == FWPM_LAYER_ALE_BIND_REDIRECT_V6)
{
for(UINT32 conditionIndex = 0;
conditionIndex < ALE_BIND_REDIRECT_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionALEBindRedirect[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
else if(*pLayerKey == FWPM_LAYER_STREAM_PACKET_V4 ||
*pLayerKey == FWPM_LAYER_STREAM_PACKET_V6)
{
for(UINT32 conditionIndex = 0;
conditionIndex < STREAM_PACKET_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionStreamPacket[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
else if(*pLayerKey == FWPM_LAYER_KM_AUTHORIZATION)
{
for(UINT32 conditionIndex = 0;
conditionIndex < KM_AUTHORIZATION_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionKMAuthorization[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
#if(NTDDI_VERSION >= NTDDI_WIN8)
else if(*pLayerKey == FWPM_LAYER_INBOUND_MAC_FRAME_ETHERNET)
{
for(UINT32 conditionIndex = 0;
conditionIndex < INBOUND_MAC_FRAME_ETHERNET_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionInboundMACFrameEthernet[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
else if(*pLayerKey == FWPM_LAYER_OUTBOUND_MAC_FRAME_ETHERNET)
{
for(UINT32 conditionIndex = 0;
conditionIndex < OUTBOUND_MAC_FRAME_ETHERNET_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionOutboundMACFrameEthernet[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
else if(*pLayerKey == FWPM_LAYER_INBOUND_MAC_FRAME_NATIVE)
{
for(UINT32 conditionIndex = 0;
conditionIndex < INBOUND_MAC_FRAME_NATIVE_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionInboundMACFrameNative[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
else if(*pLayerKey == FWPM_LAYER_OUTBOUND_MAC_FRAME_NATIVE)
{
for(UINT32 conditionIndex = 0;
conditionIndex < OUTBOUND_MAC_FRAME_NATIVE_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionOutboundMACFrameNative[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
else if(*pLayerKey == FWPM_LAYER_INGRESS_VSWITCH_ETHERNET)
{
for(UINT32 conditionIndex = 0;
conditionIndex < INGRESS_VSWITCH_ETHERNET_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionIngressVSwitchEthernet[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
else if(*pLayerKey == FWPM_LAYER_EGRESS_VSWITCH_ETHERNET)
{
for(UINT32 conditionIndex = 0;
conditionIndex < EGRESS_VSWITCH_ETHERNET_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionEgressVSwitchEthernet[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
else if(*pLayerKey == FWPM_LAYER_INGRESS_VSWITCH_TRANSPORT_V4 ||
*pLayerKey == FWPM_LAYER_INGRESS_VSWITCH_TRANSPORT_V6)
{
for(UINT32 conditionIndex = 0;
conditionIndex < INGRESS_VSWITCH_TRANSPORT_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionIngressVSwitchTransport[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
else if(*pLayerKey == FWPM_LAYER_EGRESS_VSWITCH_TRANSPORT_V4 ||
*pLayerKey == FWPM_LAYER_EGRESS_VSWITCH_TRANSPORT_V6)
{
for(UINT32 conditionIndex = 0;
conditionIndex < EGRESS_VSWITCH_TRANSPORT_CONDITIONS_COUNT;
conditionIndex++)
{
if(HlprGUIDsAreEqual(pConditionKey,
ppConditionEgressVSwitchTransport[conditionIndex]))
{
isValid = TRUE;
break;
}
}
}
#if(NTDDI_VERSION >= NTDDI_WINBLUE)
else if(*pLayerKey == FWPM_LAYER_INBOUND_TRANSPORT_FAST ||
*pLayerKey == FWPM_LAYER_OUTBOUND_TRANSPORT_FAST ||
*pLayerKey == FWPM_LAYER_INBOUND_MAC_FRAME_NATIVE_FAST ||
*pLayerKey == FWPM_LAYER_OUTBOUND_MAC_FRAME_NATIVE_FAST)
isValid = FALSE;
#endif /// (NTDDI_VERSION >= NTDDI_WINBLUE)
#endif /// (NTDDI_VERSION >= NTDDI_WIN8)
#endif /// (NTDDI_VERSION >= NTDDI_WIN7)
return isValid;
}