UINT32 HlprFwpmLayerGetFilterConditionArrayByKey()

in network/trans/WFPSampler/lib/HelperFunctions_FwpmLayer.cpp [71:502]


UINT32 HlprFwpmLayerGetFilterConditionArrayByKey(_In_ const GUID* pLayerKey,
                                                 _Outptr_result_buffer_maybenull_(*pConditionArrayCount) GUID*** pppFilterConditionArray,
                                                 _Out_ UINT16* pConditionArrayCount)
{
   ASSERT(pLayerKey);
   ASSERT(pppFilterConditionArray);
   ASSERT(pConditionArrayCount);

   UINT32 status = NO_ERROR;

   if(HlprGUIDsAreEqual(&FWPM_LAYER_INBOUND_IPPACKET_V4,
                        pLayerKey) ||
      HlprGUIDsAreEqual(&FWPM_LAYER_INBOUND_IPPACKET_V4_DISCARD,
                        pLayerKey) ||
      HlprGUIDsAreEqual(&FWPM_LAYER_INBOUND_IPPACKET_V6,
                        pLayerKey) ||
      HlprGUIDsAreEqual(&FWPM_LAYER_INBOUND_IPPACKET_V6_DISCARD,
                        pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionInboundIPPacket;

      *pConditionArrayCount = INBOUND_IPPACKET_CONDITIONS_COUNT;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_OUTBOUND_IPPACKET_V4,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_OUTBOUND_IPPACKET_V4_DISCARD,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_OUTBOUND_IPPACKET_V6,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_OUTBOUND_IPPACKET_V6_DISCARD,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionOutboundIPPacket;

      *pConditionArrayCount = OUTBOUND_IPPACKET_CONDITIONS_COUNT;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_IPFORWARD_V4,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_IPFORWARD_V4_DISCARD,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_IPFORWARD_V6,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_IPFORWARD_V6_DISCARD,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionIPForward;

      *pConditionArrayCount = IPFORWARD_CONDITIONS_COUNT;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_INBOUND_TRANSPORT_V4,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_INBOUND_TRANSPORT_V4_DISCARD,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_INBOUND_TRANSPORT_V6,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_INBOUND_TRANSPORT_V6_DISCARD,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionInboundTransport;

      *pConditionArrayCount = INBOUND_TRANSPORT_CONDITIONS_COUNT;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_OUTBOUND_TRANSPORT_V4,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_OUTBOUND_TRANSPORT_V4_DISCARD,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_OUTBOUND_TRANSPORT_V6,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_OUTBOUND_TRANSPORT_V6_DISCARD,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionOutboundTransport;

      *pConditionArrayCount = OUTBOUND_TRANSPORT_CONDITIONS_COUNT;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_STREAM_V4,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_STREAM_V4_DISCARD,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_STREAM_V6,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_STREAM_V6_DISCARD,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionStream;

      *pConditionArrayCount = STREAM_CONDITIONS_COUNT;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_DATAGRAM_DATA_V4,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_DATAGRAM_DATA_V4_DISCARD,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_DATAGRAM_DATA_V6,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_DATAGRAM_DATA_V6_DISCARD,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionDatagramData;

      *pConditionArrayCount = DATAGRAM_DATA_CONDITIONS_COUNT;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_INBOUND_ICMP_ERROR_V4,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_INBOUND_ICMP_ERROR_V4_DISCARD,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_INBOUND_ICMP_ERROR_V6,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_INBOUND_ICMP_ERROR_V6_DISCARD,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionInboundICMPError;

      *pConditionArrayCount = INBOUND_ICMP_ERROR_CONDITIONS_COUNT;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_OUTBOUND_ICMP_ERROR_V4,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_OUTBOUND_ICMP_ERROR_V4_DISCARD,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_OUTBOUND_ICMP_ERROR_V6,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_OUTBOUND_ICMP_ERROR_V6_DISCARD,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionOutboundICMPError;

      *pConditionArrayCount = OUTBOUND_ICMP_ERROR_CONDITIONS_COUNT;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V4,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V4_DISCARD,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V6,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V6_DISCARD,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionALEResourceAssignment;

      *pConditionArrayCount = ALE_RESOURCE_ASSIGNMENT_CONDITIONS_COUNT;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_AUTH_LISTEN_V4,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_ALE_AUTH_LISTEN_V4_DISCARD,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_ALE_AUTH_LISTEN_V6,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_ALE_AUTH_LISTEN_V6_DISCARD,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionALEAuthListen;

      *pConditionArrayCount = ALE_AUTH_LISTEN_CONDITIONS_COUNT;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V4,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V4_DISCARD,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V6,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V6_DISCARD,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionALEAuthRecvAccept;

      *pConditionArrayCount = ALE_AUTH_RECV_ACCEPT_CONDITIONS_COUNT;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_AUTH_CONNECT_V4,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_ALE_AUTH_CONNECT_V4_DISCARD,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_ALE_AUTH_CONNECT_V6,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_ALE_AUTH_CONNECT_V6_DISCARD,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionALEAuthConnect;

      *pConditionArrayCount = ALE_AUTH_CONNECT_CONDITIONS_COUNT;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4_DISCARD,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_ALE_FLOW_ESTABLISHED_V6,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_ALE_FLOW_ESTABLISHED_V6_DISCARD,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionALEFlowEstablished;

      *pConditionArrayCount = ALE_FLOW_ESTABLISHED_CONDITIONS_COUNT;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_IPSEC_KM_DEMUX_V4,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_IPSEC_KM_DEMUX_V6,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionIPsecKMDemux;

      *pConditionArrayCount = IPSEC_KM_DEMUX_CONDITIONS_COUNT;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_IPSEC_V4,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_IPSEC_V6,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionIPsec;

      *pConditionArrayCount = IPSEC_CONDITIONS_COUNT;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_IKEEXT_V4,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_IKEEXT_V6,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionIKEExt;

      *pConditionArrayCount = IKEEXT_CONDITIONS_COUNT;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_RPC_UM,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionRPCUM;

      *pConditionArrayCount = RPC_UM_CONDITIONS_COUNT;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_RPC_EPMAP,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionRPCEPMap;

      *pConditionArrayCount = RPC_EPMAP_CONDITIONS_COUNT;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_RPC_EP_ADD,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionRPCEPAdd;

      *pConditionArrayCount = RPC_EP_ADD_CONDITIONS_COUNT;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_RPC_UM,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionRPCProxyConn;

      *pConditionArrayCount = RPC_PROXY_CONN_CONDITIONS_COUNT;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_RPC_PROXY_IF,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionRPCProxyIf;

      *pConditionArrayCount = RPC_PROXY_IF_CONDITIONS_COUNT;
   }

#if(NTDDI_VERSION >= NTDDI_WIN7)

   else if(HlprGUIDsAreEqual(&FWPM_LAYER_NAME_RESOLUTION_CACHE_V4,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_NAME_RESOLUTION_CACHE_V6,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionNameResolutionCache;

      *pConditionArrayCount = NAME_RESOLUTION_CACHE_CONDITIONS_COUNT;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_RESOURCE_RELEASE_V4,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_ALE_RESOURCE_RELEASE_V6,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionALEResourceRelease;

      *pConditionArrayCount = ALE_RESOURCE_RELEASE_CONDITIONS_COUNT;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_ENDPOINT_CLOSURE_V4,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_ALE_ENDPOINT_CLOSURE_V6,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionALEEndpointClosure;

      *pConditionArrayCount = ALE_ENDPOINT_CLOSURE_CONDITIONS_COUNT;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_CONNECT_REDIRECT_V4,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_ALE_CONNECT_REDIRECT_V6,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionALEConnectRedirect;

      *pConditionArrayCount = ALE_CONNECT_REDIRECT_CONDITIONS_COUNT;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_BIND_REDIRECT_V4,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_ALE_BIND_REDIRECT_V6,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionALEBindRedirect;

      *pConditionArrayCount = ALE_BIND_REDIRECT_CONDITIONS_COUNT;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_STREAM_PACKET_V4,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_STREAM_PACKET_V6,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionStreamPacket;

      *pConditionArrayCount = STREAM_PACKET_CONDITIONS_COUNT;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_KM_AUTHORIZATION,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionKMAuthorization;

      *pConditionArrayCount = KM_AUTHORIZATION_CONDITIONS_COUNT;
   }

#if(NTDDI_VERSION >= NTDDI_WIN8)

   else if(HlprGUIDsAreEqual(&FWPM_LAYER_INBOUND_MAC_FRAME_ETHERNET,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionInboundMACFrameEthernet;

      *pConditionArrayCount = INBOUND_MAC_FRAME_ETHERNET_CONDITIONS_COUNT;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_OUTBOUND_MAC_FRAME_ETHERNET,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionOutboundMACFrameEthernet;

      *pConditionArrayCount = OUTBOUND_MAC_FRAME_ETHERNET_CONDITIONS_COUNT;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_INBOUND_MAC_FRAME_NATIVE,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionInboundMACFrameNative;

      *pConditionArrayCount = INBOUND_MAC_FRAME_NATIVE_CONDITIONS_COUNT;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_OUTBOUND_MAC_FRAME_NATIVE,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionOutboundMACFrameNative;

      *pConditionArrayCount = OUTBOUND_MAC_FRAME_NATIVE_CONDITIONS_COUNT;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_INGRESS_VSWITCH_ETHERNET,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionIngressVSwitchEthernet;

      *pConditionArrayCount = INGRESS_VSWITCH_ETHERNET_CONDITIONS_COUNT;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_EGRESS_VSWITCH_ETHERNET,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionEgressVSwitchEthernet;

      *pConditionArrayCount = EGRESS_VSWITCH_ETHERNET_CONDITIONS_COUNT;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_INGRESS_VSWITCH_TRANSPORT_V4,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_INGRESS_VSWITCH_TRANSPORT_V6,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionIngressVSwitchTransport;

      *pConditionArrayCount = INGRESS_VSWITCH_TRANSPORT_CONDITIONS_COUNT;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_EGRESS_VSWITCH_TRANSPORT_V4,
                             pLayerKey) ||
           HlprGUIDsAreEqual(&FWPM_LAYER_EGRESS_VSWITCH_TRANSPORT_V6,
                             pLayerKey))
   {
      *pppFilterConditionArray = (GUID**)ppConditionEgressVSwitchTransport;

      *pConditionArrayCount = EGRESS_VSWITCH_TRANSPORT_CONDITIONS_COUNT;
   }

#if(NTDDI_VERSION >= NTDDI_WINBLUE)

   else if(HlprGUIDsAreEqual(&FWPM_LAYER_INBOUND_TRANSPORT_FAST,
                             pLayerKey))
   {
      *pppFilterConditionArray = 0;

      *pConditionArrayCount = 0;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_OUTBOUND_TRANSPORT_FAST,
                             pLayerKey))
   {
      *pppFilterConditionArray = 0;

      *pConditionArrayCount = 0;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_INBOUND_MAC_FRAME_NATIVE_FAST,
                             pLayerKey))
   {
      *pppFilterConditionArray = 0;

      *pConditionArrayCount = 0;
   }
   else if(HlprGUIDsAreEqual(&FWPM_LAYER_OUTBOUND_MAC_FRAME_NATIVE_FAST,
                             pLayerKey))
   {
      *pppFilterConditionArray = 0;

      *pConditionArrayCount = 0;
   }

#endif // (NTDDI_VERSION >= NTDDI_WINBLUE)
#endif // (NTDDI_VERSION >= NTDDI_WIN8)
#endif // (NTDDI_VERSION >= NTDDI_WIN7)

   else
   {
      status = (UINT32)FWP_E_LAYER_NOT_FOUND;

      *pppFilterConditionArray = 0;

      *pConditionArrayCount = 0;

      HlprLogError(L"HlprFwpmLayerGetFilterConditionArrayByKey() [status: %#x]",
                   status);

   }

   return status;
}