BOOLEAN HlprFwpmFilterConditionIsValidForLayer()

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;
}