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