diff options
Diffstat (limited to 'network/trans/WFPSampler/lib/HelperFunctions_FwpmLayer.cpp')
| -rw-r--r-- | network/trans/WFPSampler/lib/HelperFunctions_FwpmLayer.cpp | 1720 |
1 files changed, 1720 insertions, 0 deletions
diff --git a/network/trans/WFPSampler/lib/HelperFunctions_FwpmLayer.cpp b/network/trans/WFPSampler/lib/HelperFunctions_FwpmLayer.cpp new file mode 100644 index 00000000..c67de75b --- /dev/null +++ b/network/trans/WFPSampler/lib/HelperFunctions_FwpmLayer.cpp @@ -0,0 +1,1720 @@ +//////////////////////////////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2014 Microsoft Corporation. All Rights Reserved. +// +// Module Name: +// HelperFunctions_FwpmLayer.cpp +// +// Abstract: +// This module contains functions which assist in actions pertaining to FWPM_LAYER objects. +// +// Naming Convention: +// +// <Scope><Module><Object><Action><Modifier> +// +// i.e. +// +// <Scope> +// { +// - Function is likely visible to other modules. +// } +// <Module> +// { +// Hlpr - Function is from HelperFunctions_* Modules. +// } +// <Object> +// { +// FwpmLayer - Function pertains to FWPM_LAYER objects. +// } +// <Action> +// { +// Get - Function retrieves a value. +// Is - Function determines capabilities. +// } +// <Modifier> +// { +// ByID - Function takes a runtime ID. +// ByKey - Function takes a GUID. +// ByString - Function takes a null terminated wide character string and returns the +// LayerKey. +// ID - Function acts on the objects ID. +// IPv4 - Function acts on IP version 4 objects. +// IPv6 - Function acts on IP version 6 objects. +// } +// Private Functions: +// +// Public Functions: +// HlprFwpmLayerGetByID(), +// HlprFwpmLayerGetByString(), +// HlprFwpmLayerGetIDByKey(), +// HlprFwpmLayerGetIDByString(), +// HlprFwpmLayerIsIPv4(), +// HlprFwpmLayerIsIPv6(), +// +// Author: +// Dusty Harper (DHarper) +// +// Revision History: +// +// [ Month ][Day] [Year] - [Revision]-[ Comments ] +// May 01, 2010 - 1.0 - Creation +// December 13, 2013 - 1.1 - Add basic support for WinBlue Fast layers +// +//////////////////////////////////////////////////////////////////////////////////////////////////// + +#include "HelperFunctions_Include.h" /// . + +_At_(*pppFilterConditionArray, _Pre_ _Null_) +_When_(return != NO_ERROR, _At_(*pppFilterConditionArray, _Post_ _Null_)) +_When_(return == NO_ERROR, _At_(*pppFilterConditionArray, _Post_ _Maybenull_)) +_Success_(return == NO_ERROR) +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; +} + +/** + @helper_function="HlprFwpmLayerGetIDByKey" + + Purpose: Return the runtime ID of the layer provided the layer's key. <br> + <br> + Notes: <br> + <br> + MSDN_Ref: HTTP://MSDN.Microsoft.com/En-US/Library/Windows/Desktop/AA366492.aspx <br> + HTTP://MSDN.Microsoft.com/En-US/Library/Windows/Desktop/FF570731.aspx <br> +*/ +_Success_(return < FWPS_BUILTIN_LAYER_MAX) +UINT8 HlprFwpmLayerGetIDByKey(_In_ const GUID* pLayerKey) +{ + ASSERT(pLayerKey); + + UINT8 layerID = FWPS_BUILTIN_LAYER_MAX; + + if(HlprGUIDsAreEqual(&FWPM_LAYER_INBOUND_IPPACKET_V4, + pLayerKey)) + layerID = FWPS_LAYER_INBOUND_IPPACKET_V4; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_INBOUND_IPPACKET_V4_DISCARD, + pLayerKey)) + layerID = FWPS_LAYER_INBOUND_IPPACKET_V4_DISCARD; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_INBOUND_IPPACKET_V6, + pLayerKey)) + layerID = FWPS_LAYER_INBOUND_IPPACKET_V6; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_INBOUND_IPPACKET_V6_DISCARD, + pLayerKey)) + layerID = FWPS_LAYER_INBOUND_IPPACKET_V6_DISCARD; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_OUTBOUND_IPPACKET_V4, + pLayerKey)) + layerID = FWPS_LAYER_OUTBOUND_IPPACKET_V4; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_OUTBOUND_IPPACKET_V4_DISCARD, + pLayerKey)) + layerID = FWPS_LAYER_OUTBOUND_IPPACKET_V4_DISCARD; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_OUTBOUND_IPPACKET_V6, + pLayerKey)) + layerID = FWPS_LAYER_OUTBOUND_IPPACKET_V6; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_OUTBOUND_IPPACKET_V6_DISCARD, + pLayerKey)) + layerID = FWPS_LAYER_OUTBOUND_IPPACKET_V6_DISCARD; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_IPFORWARD_V4, + pLayerKey)) + layerID = FWPS_LAYER_IPFORWARD_V4; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_IPFORWARD_V4_DISCARD, + pLayerKey)) + layerID = FWPS_LAYER_IPFORWARD_V4_DISCARD; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_IPFORWARD_V6, + pLayerKey)) + layerID = FWPS_LAYER_IPFORWARD_V6; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_IPFORWARD_V6_DISCARD, + pLayerKey)) + layerID = FWPS_LAYER_IPFORWARD_V6_DISCARD; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_INBOUND_TRANSPORT_V4, + pLayerKey)) + layerID = FWPS_LAYER_INBOUND_TRANSPORT_V4; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_INBOUND_TRANSPORT_V4_DISCARD, + pLayerKey)) + layerID = FWPS_LAYER_INBOUND_TRANSPORT_V4_DISCARD; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_INBOUND_TRANSPORT_V6, + pLayerKey)) + layerID = FWPS_LAYER_INBOUND_TRANSPORT_V6; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_INBOUND_TRANSPORT_V6_DISCARD, + pLayerKey)) + layerID = FWPS_LAYER_INBOUND_TRANSPORT_V6_DISCARD; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_OUTBOUND_TRANSPORT_V4, + pLayerKey)) + layerID = FWPS_LAYER_OUTBOUND_TRANSPORT_V4; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_OUTBOUND_TRANSPORT_V4_DISCARD, + pLayerKey)) + layerID = FWPS_LAYER_OUTBOUND_TRANSPORT_V4_DISCARD; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_OUTBOUND_TRANSPORT_V6, + pLayerKey)) + layerID = FWPS_LAYER_OUTBOUND_TRANSPORT_V6; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_OUTBOUND_TRANSPORT_V6_DISCARD, + pLayerKey)) + layerID = FWPS_LAYER_OUTBOUND_TRANSPORT_V6_DISCARD; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_STREAM_V4, + pLayerKey)) + layerID = FWPS_LAYER_STREAM_V4; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_STREAM_V4_DISCARD, + pLayerKey)) + layerID = FWPS_LAYER_STREAM_V4_DISCARD; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_STREAM_V6, + pLayerKey)) + layerID = FWPS_LAYER_STREAM_V6; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_STREAM_V6_DISCARD, + pLayerKey)) + layerID = FWPS_LAYER_STREAM_V6_DISCARD; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_DATAGRAM_DATA_V4, + pLayerKey)) + layerID = FWPS_LAYER_DATAGRAM_DATA_V4; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_DATAGRAM_DATA_V4_DISCARD, + pLayerKey)) + layerID = FWPS_LAYER_DATAGRAM_DATA_V4_DISCARD; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_DATAGRAM_DATA_V6, + pLayerKey)) + layerID = FWPS_LAYER_DATAGRAM_DATA_V6; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_DATAGRAM_DATA_V6_DISCARD, + pLayerKey)) + layerID = FWPS_LAYER_DATAGRAM_DATA_V6_DISCARD; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_INBOUND_ICMP_ERROR_V4, + pLayerKey)) + layerID = FWPS_LAYER_INBOUND_ICMP_ERROR_V4; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_INBOUND_ICMP_ERROR_V4_DISCARD, + pLayerKey)) + layerID = FWPS_LAYER_INBOUND_ICMP_ERROR_V4_DISCARD; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_INBOUND_ICMP_ERROR_V6, + pLayerKey)) + layerID = FWPS_LAYER_INBOUND_ICMP_ERROR_V6; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_INBOUND_ICMP_ERROR_V6_DISCARD, + pLayerKey)) + layerID = FWPS_LAYER_INBOUND_ICMP_ERROR_V6_DISCARD; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_OUTBOUND_ICMP_ERROR_V4, + pLayerKey)) + layerID = FWPS_LAYER_OUTBOUND_ICMP_ERROR_V4; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_OUTBOUND_ICMP_ERROR_V4_DISCARD, + pLayerKey)) + layerID = FWPS_LAYER_OUTBOUND_ICMP_ERROR_V4_DISCARD; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_OUTBOUND_ICMP_ERROR_V6, + pLayerKey)) + layerID = FWPS_LAYER_OUTBOUND_ICMP_ERROR_V6; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_OUTBOUND_ICMP_ERROR_V6_DISCARD, + pLayerKey)) + layerID = FWPS_LAYER_OUTBOUND_ICMP_ERROR_V6_DISCARD; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V4, + pLayerKey)) + layerID = FWPS_LAYER_ALE_RESOURCE_ASSIGNMENT_V4; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V4_DISCARD, + pLayerKey)) + layerID = FWPS_LAYER_ALE_RESOURCE_ASSIGNMENT_V4_DISCARD; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V6, + pLayerKey)) + layerID = FWPS_LAYER_ALE_RESOURCE_ASSIGNMENT_V6; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V6_DISCARD, + pLayerKey)) + layerID = FWPS_LAYER_ALE_RESOURCE_ASSIGNMENT_V6_DISCARD; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_AUTH_LISTEN_V4, + pLayerKey)) + layerID = FWPS_LAYER_ALE_AUTH_LISTEN_V4; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_AUTH_LISTEN_V4_DISCARD, + pLayerKey)) + layerID = FWPS_LAYER_ALE_AUTH_LISTEN_V4_DISCARD; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_AUTH_LISTEN_V6, + pLayerKey)) + layerID = FWPS_LAYER_ALE_AUTH_LISTEN_V6; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_AUTH_LISTEN_V6_DISCARD, + pLayerKey)) + layerID = FWPS_LAYER_ALE_AUTH_LISTEN_V6_DISCARD; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V4, + pLayerKey)) + layerID = FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V4; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V4_DISCARD, + pLayerKey)) + layerID = FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V4_DISCARD; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V6, + pLayerKey)) + layerID = FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V6; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V6_DISCARD, + pLayerKey)) + layerID = FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V6_DISCARD; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_AUTH_CONNECT_V4, + pLayerKey)) + layerID = FWPS_LAYER_ALE_AUTH_CONNECT_V4; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_AUTH_CONNECT_V4_DISCARD, + pLayerKey)) + layerID = FWPS_LAYER_ALE_AUTH_CONNECT_V4_DISCARD; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_AUTH_CONNECT_V6, + pLayerKey)) + layerID = FWPS_LAYER_ALE_AUTH_CONNECT_V6; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_AUTH_CONNECT_V6_DISCARD, + pLayerKey)) + layerID = FWPS_LAYER_ALE_AUTH_CONNECT_V6_DISCARD; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4, + pLayerKey)) + layerID = FWPS_LAYER_ALE_FLOW_ESTABLISHED_V4; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4_DISCARD, + pLayerKey)) + layerID = FWPS_LAYER_ALE_FLOW_ESTABLISHED_V4_DISCARD; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_FLOW_ESTABLISHED_V6, + pLayerKey)) + layerID = FWPS_LAYER_ALE_FLOW_ESTABLISHED_V6; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_FLOW_ESTABLISHED_V6_DISCARD, + pLayerKey)) + layerID = FWPS_LAYER_ALE_FLOW_ESTABLISHED_V6_DISCARD; + +#if(NTDDI_VERSION >= NTDDI_WIN7) + + else if(HlprGUIDsAreEqual(&FWPM_LAYER_NAME_RESOLUTION_CACHE_V4, + pLayerKey)) + layerID = FWPS_LAYER_NAME_RESOLUTION_CACHE_V4; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_NAME_RESOLUTION_CACHE_V6, + pLayerKey)) + layerID = FWPS_LAYER_NAME_RESOLUTION_CACHE_V6; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_RESOURCE_RELEASE_V4, + pLayerKey)) + layerID = FWPS_LAYER_ALE_RESOURCE_RELEASE_V4; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_RESOURCE_RELEASE_V6, + pLayerKey)) + layerID = FWPS_LAYER_ALE_RESOURCE_RELEASE_V6; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_ENDPOINT_CLOSURE_V4, + pLayerKey)) + layerID = FWPS_LAYER_ALE_ENDPOINT_CLOSURE_V4; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_ENDPOINT_CLOSURE_V6, + pLayerKey)) + layerID = FWPS_LAYER_ALE_ENDPOINT_CLOSURE_V6; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_CONNECT_REDIRECT_V4, + pLayerKey)) + layerID = FWPS_LAYER_ALE_CONNECT_REDIRECT_V4; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_CONNECT_REDIRECT_V6, + pLayerKey)) + layerID = FWPS_LAYER_ALE_CONNECT_REDIRECT_V6; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_BIND_REDIRECT_V4, + pLayerKey)) + layerID = FWPS_LAYER_ALE_BIND_REDIRECT_V4; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_ALE_BIND_REDIRECT_V6, + pLayerKey)) + layerID = FWPS_LAYER_ALE_BIND_REDIRECT_V6; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_STREAM_PACKET_V4, + pLayerKey)) + layerID = FWPS_LAYER_STREAM_PACKET_V4; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_STREAM_PACKET_V6, + pLayerKey)) + layerID = FWPS_LAYER_STREAM_PACKET_V6; + +#if(NTDDI_VERSION >= NTDDI_WIN8) + + else if(HlprGUIDsAreEqual(&FWPM_LAYER_INBOUND_MAC_FRAME_ETHERNET, + pLayerKey)) + layerID = FWPS_LAYER_INBOUND_MAC_FRAME_ETHERNET; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_OUTBOUND_MAC_FRAME_ETHERNET, + pLayerKey)) + layerID = FWPS_LAYER_OUTBOUND_MAC_FRAME_ETHERNET; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_INBOUND_MAC_FRAME_NATIVE, + pLayerKey)) + layerID = FWPS_LAYER_INBOUND_MAC_FRAME_NATIVE; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_OUTBOUND_MAC_FRAME_NATIVE, + pLayerKey)) + layerID = FWPS_LAYER_OUTBOUND_MAC_FRAME_NATIVE; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_INGRESS_VSWITCH_ETHERNET, + pLayerKey)) + layerID = FWPS_LAYER_INGRESS_VSWITCH_ETHERNET; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_EGRESS_VSWITCH_ETHERNET, + pLayerKey)) + layerID = FWPS_LAYER_EGRESS_VSWITCH_ETHERNET; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_INGRESS_VSWITCH_TRANSPORT_V4, + pLayerKey)) + layerID = FWPS_LAYER_INGRESS_VSWITCH_TRANSPORT_V4; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_INGRESS_VSWITCH_TRANSPORT_V6, + pLayerKey)) + layerID = FWPS_LAYER_INGRESS_VSWITCH_TRANSPORT_V6; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_EGRESS_VSWITCH_TRANSPORT_V4, + pLayerKey)) + layerID = FWPS_LAYER_EGRESS_VSWITCH_TRANSPORT_V4; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_EGRESS_VSWITCH_TRANSPORT_V6, + pLayerKey)) + layerID = FWPS_LAYER_EGRESS_VSWITCH_TRANSPORT_V6; + +#if(NTDDI_VERSION >= NTDDI_WINBLUE) + + else if(HlprGUIDsAreEqual(&FWPM_LAYER_INBOUND_TRANSPORT_FAST, + pLayerKey)) + layerID = FWPS_LAYER_INBOUND_TRANSPORT_FAST; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_OUTBOUND_TRANSPORT_FAST, + pLayerKey)) + layerID = FWPS_LAYER_OUTBOUND_TRANSPORT_FAST; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_INBOUND_MAC_FRAME_NATIVE_FAST, + pLayerKey)) + layerID = FWPS_LAYER_INBOUND_MAC_FRAME_NATIVE_FAST; + else if(HlprGUIDsAreEqual(&FWPM_LAYER_OUTBOUND_MAC_FRAME_NATIVE_FAST, + pLayerKey)) + layerID = FWPS_LAYER_OUTBOUND_MAC_FRAME_NATIVE_FAST; + +#endif // (NTDDI_VERSION >= NTDDI_WINBLUE) +#endif // (NTDDI_VERSION >= NTDDI_WIN8) +#endif // (NTDDI_VERSION >= NTDDI_WIN7) + + return layerID; +} + +/** + @helper_function="HlprFwpmLayerGetID" + + Purpose: Return the runtime ID of the layer provided a string representation of the layer's + name. <br> + <br> + Notes: <br> + <br> + MSDN_Ref: HTTP://MSDN.Microsoft.com/En-US/Library/Windows/Desktop/AA366492.aspx <br> + HTTP://MSDN.Microsoft.com/En-US/Library/Windows/Desktop/FF570731.aspx <br> +*/ +_Success_(return < FWPS_BUILTIN_LAYER_MAX) +UINT8 HlprFwpmLayerGetIDByString(_In_ PCWSTR pLayerString) +{ + ASSERT(pLayerString); + + UINT8 layerID = FWPS_BUILTIN_LAYER_MAX; + + if(HlprStringsAreEqual(L"FWPM_LAYER_INBOUND_IPPACKET_V4", + pLayerString)) + layerID = FWPS_LAYER_INBOUND_IPPACKET_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_INBOUND_IPPACKET_V4_DISCARD", + pLayerString)) + layerID = FWPS_LAYER_INBOUND_IPPACKET_V4_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_INBOUND_IPPACKET_V6", + pLayerString)) + layerID = FWPS_LAYER_INBOUND_IPPACKET_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_INBOUND_IPPACKET_V6_DISCARD", + pLayerString)) + layerID = FWPS_LAYER_INBOUND_IPPACKET_V6_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_OUTBOUND_IPPACKET_V4", + pLayerString)) + layerID = FWPS_LAYER_OUTBOUND_IPPACKET_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_OUTBOUND_IPPACKET_V4_DISCARD", + pLayerString)) + layerID = FWPS_LAYER_OUTBOUND_IPPACKET_V4_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_OUTBOUND_IPPACKET_V6", + pLayerString)) + layerID = FWPS_LAYER_OUTBOUND_IPPACKET_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_OUTBOUND_IPPACKET_V6_DISCARD", + pLayerString)) + layerID = FWPS_LAYER_OUTBOUND_IPPACKET_V6_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_IPFORWARD_V4", + pLayerString)) + layerID = FWPS_LAYER_IPFORWARD_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_IPFORWARD_V4_DISCARD", + pLayerString)) + layerID = FWPS_LAYER_IPFORWARD_V4_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_IPFORWARD_V6", + pLayerString)) + layerID = FWPS_LAYER_IPFORWARD_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_IPFORWARD_V6_DISCARD", + pLayerString)) + layerID = FWPS_LAYER_IPFORWARD_V6_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_INBOUND_TRANSPORT_V4", + pLayerString)) + layerID = FWPS_LAYER_INBOUND_TRANSPORT_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_INBOUND_TRANSPORT_V4_DISCARD", + pLayerString)) + layerID = FWPS_LAYER_INBOUND_TRANSPORT_V4_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_INBOUND_TRANSPORT_V6", + pLayerString)) + layerID = FWPS_LAYER_INBOUND_TRANSPORT_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_INBOUND_TRANSPORT_V6_DISCARD", + pLayerString)) + layerID = FWPS_LAYER_INBOUND_TRANSPORT_V6_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_OUTBOUND_TRANSPORT_V4", + pLayerString)) + layerID = FWPS_LAYER_OUTBOUND_TRANSPORT_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_OUTBOUND_TRANSPORT_V4_DISCARD", + pLayerString)) + layerID = FWPS_LAYER_OUTBOUND_TRANSPORT_V4_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_OUTBOUND_TRANSPORT_V6", + pLayerString)) + layerID = FWPS_LAYER_OUTBOUND_TRANSPORT_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_OUTBOUND_TRANSPORT_V6_DISCARD", + pLayerString)) + layerID = FWPS_LAYER_OUTBOUND_TRANSPORT_V6_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_STREAM_V4", + pLayerString)) + layerID = FWPS_LAYER_STREAM_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_STREAM_V4_DISCARD", + pLayerString)) + layerID = FWPS_LAYER_STREAM_V4_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_STREAM_V6", + pLayerString)) + layerID = FWPS_LAYER_STREAM_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_STREAM_V6_DISCARD", + pLayerString)) + layerID = FWPS_LAYER_STREAM_V6_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_DATAGRAM_DATA_V4", + pLayerString)) + layerID = FWPS_LAYER_DATAGRAM_DATA_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_DATAGRAM_DATA_V4_DISCARD", + pLayerString)) + layerID = FWPS_LAYER_DATAGRAM_DATA_V4_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_DATAGRAM_DATA_V6", + pLayerString)) + layerID = FWPS_LAYER_DATAGRAM_DATA_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_DATAGRAM_DATA_V6_DISCARD", + pLayerString)) + layerID = FWPS_LAYER_DATAGRAM_DATA_V6_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_INBOUND_ICMP_ERROR_V4", + pLayerString)) + layerID = FWPS_LAYER_INBOUND_ICMP_ERROR_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_INBOUND_ICMP_ERROR_V4_DISCARD", + pLayerString)) + layerID = FWPS_LAYER_INBOUND_ICMP_ERROR_V4_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_INBOUND_ICMP_ERROR_V6", + pLayerString)) + layerID = FWPS_LAYER_INBOUND_ICMP_ERROR_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_INBOUND_ICMP_ERROR_V6_DISCARD", + pLayerString)) + layerID = FWPS_LAYER_INBOUND_ICMP_ERROR_V6_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_OUTBOUND_ICMP_ERROR_V4", + pLayerString)) + layerID = FWPS_LAYER_OUTBOUND_ICMP_ERROR_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_OUTBOUND_ICMP_ERROR_V4_DISCARD", + pLayerString)) + layerID = FWPS_LAYER_OUTBOUND_ICMP_ERROR_V4_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_OUTBOUND_ICMP_ERROR_V6", + pLayerString)) + layerID = FWPS_LAYER_OUTBOUND_ICMP_ERROR_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_OUTBOUND_ICMP_ERROR_V6_DISCARD", + pLayerString)) + layerID = FWPS_LAYER_OUTBOUND_ICMP_ERROR_V6_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V4", + pLayerString)) + layerID = FWPS_LAYER_ALE_RESOURCE_ASSIGNMENT_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V4_DISCARD", + pLayerString)) + layerID = FWPS_LAYER_ALE_RESOURCE_ASSIGNMENT_V4_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V6", + pLayerString)) + layerID = FWPS_LAYER_ALE_RESOURCE_ASSIGNMENT_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V6_DISCARD", + pLayerString)) + layerID = FWPS_LAYER_ALE_RESOURCE_ASSIGNMENT_V6_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_AUTH_LISTEN_V4", + pLayerString)) + layerID = FWPS_LAYER_ALE_AUTH_LISTEN_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_AUTH_LISTEN_V4_DISCARD", + pLayerString)) + layerID = FWPS_LAYER_ALE_AUTH_LISTEN_V4_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_AUTH_LISTEN_V6", + pLayerString)) + layerID = FWPS_LAYER_ALE_AUTH_LISTEN_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_AUTH_LISTEN_V6_DISCARD", + pLayerString)) + layerID = FWPS_LAYER_ALE_AUTH_LISTEN_V6_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V4", + pLayerString)) + layerID = FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V4_DISCARD", + pLayerString)) + layerID = FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V4_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V6", + pLayerString)) + layerID = FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V6_DISCARD", + pLayerString)) + layerID = FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V6_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_AUTH_CONNECT_V4", + pLayerString)) + layerID = FWPS_LAYER_ALE_AUTH_CONNECT_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_AUTH_CONNECT_V4_DISCARD", + pLayerString)) + layerID = FWPS_LAYER_ALE_AUTH_CONNECT_V4_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_AUTH_CONNECT_V6", + pLayerString)) + layerID = FWPS_LAYER_ALE_AUTH_CONNECT_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_AUTH_CONNECT_V6_DISCARD", + pLayerString)) + layerID = FWPS_LAYER_ALE_AUTH_CONNECT_V6_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4", + pLayerString)) + layerID = FWPS_LAYER_ALE_FLOW_ESTABLISHED_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4_DISCARD", + pLayerString)) + layerID = FWPS_LAYER_ALE_FLOW_ESTABLISHED_V4_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_FLOW_ESTABLISHED_V6", + pLayerString)) + layerID = FWPS_LAYER_ALE_FLOW_ESTABLISHED_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_FLOW_ESTABLISHED_V6_DISCARD", + pLayerString)) + layerID = FWPS_LAYER_ALE_FLOW_ESTABLISHED_V6_DISCARD; + +#if(NTDDI_VERSION >= NTDDI_WIN7) + + else if(HlprStringsAreEqual(L"FWPM_LAYER_INBOUND_MAC_FRAME_ETHERNET", + pLayerString)) + layerID = FWPS_LAYER_INBOUND_MAC_FRAME_ETHERNET; + else if(HlprStringsAreEqual(L"FWPM_LAYER_OUTBOUND_MAC_FRAME_ETHERNET", + pLayerString)) + layerID = FWPS_LAYER_OUTBOUND_MAC_FRAME_ETHERNET; + else if(HlprStringsAreEqual(L"FWPM_LAYER_NAME_RESOLUTION_CACHE_V4", + pLayerString)) + layerID = FWPS_LAYER_NAME_RESOLUTION_CACHE_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_NAME_RESOLUTION_CACHE_V6", + pLayerString)) + layerID = FWPS_LAYER_NAME_RESOLUTION_CACHE_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_RESOURCE_RELEASE_V4", + pLayerString)) + layerID = FWPS_LAYER_ALE_RESOURCE_RELEASE_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_RESOURCE_RELEASE_V6", + pLayerString)) + layerID = FWPS_LAYER_ALE_RESOURCE_RELEASE_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_ENDPOINT_CLOSURE_V4", + pLayerString)) + layerID = FWPS_LAYER_ALE_ENDPOINT_CLOSURE_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_ENDPOINT_CLOSURE_V6", + pLayerString)) + layerID = FWPS_LAYER_ALE_ENDPOINT_CLOSURE_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_CONNECT_REDIRECT_V4", + pLayerString)) + layerID = FWPS_LAYER_ALE_CONNECT_REDIRECT_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_CONNECT_REDIRECT_V6", + pLayerString)) + layerID = FWPS_LAYER_ALE_CONNECT_REDIRECT_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_BIND_REDIRECT_V4", + pLayerString)) + layerID = FWPS_LAYER_ALE_BIND_REDIRECT_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_BIND_REDIRECT_V6", + pLayerString)) + layerID = FWPS_LAYER_ALE_BIND_REDIRECT_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_STREAM_PACKET_V4", + pLayerString)) + layerID = FWPS_LAYER_STREAM_PACKET_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_STREAM_PACKET_V6", + pLayerString)) + layerID = FWPS_LAYER_STREAM_PACKET_V6; + +#if(NTDDI_VERSION >= NTDDI_WIN8) + + else if(HlprStringsAreEqual(L"FWPM_LAYER_INBOUND_MAC_FRAME_NATIVE", + pLayerString)) + layerID = FWPS_LAYER_INBOUND_MAC_FRAME_NATIVE; + else if(HlprStringsAreEqual(L"FWPM_LAYER_OUTBOUND_MAC_FRAME_NATIVE", + pLayerString)) + layerID = FWPS_LAYER_OUTBOUND_MAC_FRAME_NATIVE; + else if(HlprStringsAreEqual(L"FWPM_LAYER_INGRESS_VSWITCH_ETHERNET", + pLayerString)) + layerID = FWPS_LAYER_INGRESS_VSWITCH_ETHERNET; + else if(HlprStringsAreEqual(L"FWPM_LAYER_EGRESS_VSWITCH_ETHERNET", + pLayerString)) + layerID = FWPS_LAYER_EGRESS_VSWITCH_ETHERNET; + else if(HlprStringsAreEqual(L"FWPM_LAYER_INGRESS_VSWITCH_TRANSPORT_V4", + pLayerString)) + layerID = FWPS_LAYER_INGRESS_VSWITCH_TRANSPORT_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_INGRESS_VSWITCH_TRANSPORT_V6", + pLayerString)) + layerID = FWPS_LAYER_INGRESS_VSWITCH_TRANSPORT_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_EGRESS_VSWITCH_TRANSPORT_V4", + pLayerString)) + layerID = FWPS_LAYER_EGRESS_VSWITCH_TRANSPORT_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_EGRESS_VSWITCH_TRANSPORT_V6", + pLayerString)) + layerID = FWPS_LAYER_EGRESS_VSWITCH_TRANSPORT_V6; + +#if(NTDDI_VERSION >= NTDDI_WINBLUE) + + else if(HlprStringsAreEqual(L"FWPM_LAYER_INBOUND_TRANSPORT_FAST", + pLayerString)) + layerID = FWPS_LAYER_INBOUND_TRANSPORT_FAST; + else if(HlprStringsAreEqual(L"FWPM_LAYER_OUTBOUND_TRANSPORT_FAST", + pLayerString)) + layerID = FWPS_LAYER_OUTBOUND_TRANSPORT_FAST; + else if(HlprStringsAreEqual(L"FWPM_LAYER_INBOUND_MAC_FRAME_NATIVE_FAST", + pLayerString)) + layerID = FWPS_LAYER_INBOUND_MAC_FRAME_NATIVE_FAST; + else if(HlprStringsAreEqual(L"FWPM_LAYER_OUTBOUND_MAC_FRAME_NATIVE_FAST", + pLayerString)) + layerID = FWPS_LAYER_OUTBOUND_MAC_FRAME_NATIVE_FAST; + +#endif // (NTDDI_VERSION >= NTDDI_WINBLUE) +#endif // (NTDDI_VERSION >= NTDDI_WIN8) +#endif // (NTDDI_VERSION >= NTDDI_WIN7) + + return layerID; +} + +/** + @helper_function="HlprFwpmLayerGetByID" + + Purpose: Return a pointer to the GUID of the layer represented by the provider layer's + runtime ID. <br> + <br> + Notes: Calling function must check for NULL pointer. <br> + <br> + MSDN_Ref: HTTP://MSDN.Microsoft.com/En-US/Library/Windows/Desktop/AA366492.aspx <br> + HTTP://MSDN.Microsoft.com/En-US/Library/Windows/Desktop/FF570731.aspx <br> +*/ +_Success_(return != 0) +const GUID* HlprFwpmLayerGetByID(_In_ const UINT32 layerID) +{ + const GUID* pLayerKey = 0; + + if(layerID == FWPS_LAYER_INBOUND_IPPACKET_V4) + pLayerKey = &FWPM_LAYER_INBOUND_IPPACKET_V4; + else if(layerID == FWPS_LAYER_INBOUND_IPPACKET_V4_DISCARD) + pLayerKey = &FWPM_LAYER_INBOUND_IPPACKET_V4_DISCARD; + else if(layerID == FWPS_LAYER_INBOUND_IPPACKET_V6) + pLayerKey = &FWPM_LAYER_INBOUND_IPPACKET_V6; + else if(layerID == FWPS_LAYER_INBOUND_IPPACKET_V6_DISCARD) + pLayerKey = &FWPM_LAYER_INBOUND_IPPACKET_V6_DISCARD; + else if(layerID == FWPS_LAYER_OUTBOUND_IPPACKET_V4) + pLayerKey = &FWPM_LAYER_OUTBOUND_IPPACKET_V4; + else if(layerID == FWPS_LAYER_OUTBOUND_IPPACKET_V4_DISCARD) + pLayerKey = &FWPM_LAYER_OUTBOUND_IPPACKET_V4_DISCARD; + else if(layerID == FWPS_LAYER_OUTBOUND_IPPACKET_V6) + pLayerKey = &FWPM_LAYER_OUTBOUND_IPPACKET_V6; + else if(layerID == FWPS_LAYER_OUTBOUND_IPPACKET_V6_DISCARD) + pLayerKey = &FWPM_LAYER_OUTBOUND_IPPACKET_V6_DISCARD; + else if(layerID == FWPS_LAYER_IPFORWARD_V4) + pLayerKey = &FWPM_LAYER_IPFORWARD_V4; + else if(layerID == FWPS_LAYER_IPFORWARD_V4_DISCARD) + pLayerKey = &FWPM_LAYER_IPFORWARD_V4_DISCARD; + else if(layerID == FWPS_LAYER_IPFORWARD_V6) + pLayerKey = &FWPM_LAYER_IPFORWARD_V6; + else if(layerID == FWPS_LAYER_IPFORWARD_V6_DISCARD) + pLayerKey = &FWPM_LAYER_IPFORWARD_V6_DISCARD; + else if(layerID == FWPS_LAYER_INBOUND_TRANSPORT_V4) + pLayerKey = &FWPM_LAYER_INBOUND_TRANSPORT_V4; + else if(layerID == FWPS_LAYER_INBOUND_TRANSPORT_V4_DISCARD) + pLayerKey = &FWPM_LAYER_INBOUND_TRANSPORT_V4_DISCARD; + else if(layerID == FWPS_LAYER_INBOUND_TRANSPORT_V6) + pLayerKey = &FWPM_LAYER_INBOUND_TRANSPORT_V6; + else if(layerID == FWPS_LAYER_INBOUND_TRANSPORT_V6_DISCARD) + pLayerKey = &FWPM_LAYER_INBOUND_TRANSPORT_V6_DISCARD; + else if(layerID == FWPS_LAYER_OUTBOUND_TRANSPORT_V4) + pLayerKey = &FWPM_LAYER_OUTBOUND_TRANSPORT_V4; + else if(layerID == FWPS_LAYER_OUTBOUND_TRANSPORT_V4_DISCARD) + pLayerKey = &FWPM_LAYER_OUTBOUND_TRANSPORT_V4_DISCARD; + else if(layerID == FWPS_LAYER_OUTBOUND_TRANSPORT_V6) + pLayerKey = &FWPM_LAYER_OUTBOUND_TRANSPORT_V6; + else if(layerID == FWPS_LAYER_OUTBOUND_TRANSPORT_V6_DISCARD) + pLayerKey = &FWPM_LAYER_OUTBOUND_TRANSPORT_V6_DISCARD; + else if(layerID == FWPS_LAYER_STREAM_V4) + pLayerKey = &FWPM_LAYER_STREAM_V4; + else if(layerID == FWPS_LAYER_STREAM_V4_DISCARD) + pLayerKey = &FWPM_LAYER_STREAM_V4_DISCARD; + else if(layerID == FWPS_LAYER_STREAM_V6) + pLayerKey = &FWPM_LAYER_STREAM_V6; + else if(layerID == FWPS_LAYER_STREAM_V6_DISCARD) + pLayerKey = &FWPM_LAYER_STREAM_V6_DISCARD; + else if(layerID == FWPS_LAYER_DATAGRAM_DATA_V4) + pLayerKey = &FWPM_LAYER_DATAGRAM_DATA_V4; + else if(layerID == FWPS_LAYER_DATAGRAM_DATA_V4_DISCARD) + pLayerKey = &FWPM_LAYER_DATAGRAM_DATA_V4_DISCARD; + else if(layerID == FWPS_LAYER_DATAGRAM_DATA_V6) + pLayerKey = &FWPM_LAYER_DATAGRAM_DATA_V6; + else if(layerID == FWPS_LAYER_DATAGRAM_DATA_V6_DISCARD) + pLayerKey = &FWPM_LAYER_DATAGRAM_DATA_V6_DISCARD; + else if(layerID == FWPS_LAYER_INBOUND_ICMP_ERROR_V4) + pLayerKey = &FWPM_LAYER_INBOUND_ICMP_ERROR_V4; + else if(layerID == FWPS_LAYER_INBOUND_ICMP_ERROR_V4_DISCARD) + pLayerKey = &FWPM_LAYER_INBOUND_ICMP_ERROR_V4_DISCARD; + else if(layerID == FWPS_LAYER_INBOUND_ICMP_ERROR_V6) + pLayerKey = &FWPM_LAYER_INBOUND_ICMP_ERROR_V6; + else if(layerID == FWPS_LAYER_INBOUND_ICMP_ERROR_V6_DISCARD) + pLayerKey = &FWPM_LAYER_INBOUND_ICMP_ERROR_V6_DISCARD; + else if(layerID == FWPS_LAYER_OUTBOUND_ICMP_ERROR_V4) + pLayerKey = &FWPM_LAYER_OUTBOUND_ICMP_ERROR_V4; + else if(layerID == FWPS_LAYER_OUTBOUND_ICMP_ERROR_V4_DISCARD) + pLayerKey = &FWPM_LAYER_OUTBOUND_ICMP_ERROR_V4_DISCARD; + else if(layerID == FWPS_LAYER_OUTBOUND_ICMP_ERROR_V6) + pLayerKey = &FWPM_LAYER_OUTBOUND_ICMP_ERROR_V6; + else if(layerID == FWPS_LAYER_OUTBOUND_ICMP_ERROR_V6_DISCARD) + pLayerKey = &FWPM_LAYER_OUTBOUND_ICMP_ERROR_V6_DISCARD; + else if(layerID == FWPS_LAYER_ALE_RESOURCE_ASSIGNMENT_V4) + pLayerKey = &FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V4; + else if(layerID == FWPS_LAYER_ALE_RESOURCE_ASSIGNMENT_V4_DISCARD) + pLayerKey = &FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V4_DISCARD; + else if(layerID == FWPS_LAYER_ALE_RESOURCE_ASSIGNMENT_V6) + pLayerKey = &FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V6; + else if(layerID == FWPS_LAYER_ALE_RESOURCE_ASSIGNMENT_V6_DISCARD) + pLayerKey = &FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V6_DISCARD; + else if(layerID == FWPS_LAYER_ALE_AUTH_LISTEN_V4) + pLayerKey = &FWPM_LAYER_ALE_AUTH_LISTEN_V4; + else if(layerID == FWPS_LAYER_ALE_AUTH_LISTEN_V4_DISCARD) + pLayerKey = &FWPM_LAYER_ALE_AUTH_LISTEN_V4_DISCARD; + else if(layerID == FWPS_LAYER_ALE_AUTH_LISTEN_V6) + pLayerKey = &FWPM_LAYER_ALE_AUTH_LISTEN_V6; + else if(layerID == FWPS_LAYER_ALE_AUTH_LISTEN_V6_DISCARD) + pLayerKey = &FWPM_LAYER_ALE_AUTH_LISTEN_V6_DISCARD; + else if(layerID == FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V4) + pLayerKey = &FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V4; + else if(layerID == FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V4_DISCARD) + pLayerKey = &FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V4_DISCARD; + else if(layerID == FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V6) + pLayerKey = &FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V6; + else if(layerID == FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V6_DISCARD) + pLayerKey = &FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V6_DISCARD; + else if(layerID == FWPS_LAYER_ALE_AUTH_CONNECT_V4) + pLayerKey = &FWPM_LAYER_ALE_AUTH_CONNECT_V4; + else if(layerID == FWPS_LAYER_ALE_AUTH_CONNECT_V4_DISCARD) + pLayerKey = &FWPM_LAYER_ALE_AUTH_CONNECT_V4_DISCARD; + else if(layerID == FWPS_LAYER_ALE_AUTH_CONNECT_V6) + pLayerKey = &FWPM_LAYER_ALE_AUTH_CONNECT_V6; + else if(layerID == FWPS_LAYER_ALE_AUTH_CONNECT_V6_DISCARD) + pLayerKey = &FWPM_LAYER_ALE_AUTH_CONNECT_V6_DISCARD; + else if(layerID == FWPS_LAYER_ALE_FLOW_ESTABLISHED_V4) + pLayerKey = &FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4; + else if(layerID == FWPS_LAYER_ALE_FLOW_ESTABLISHED_V4_DISCARD) + pLayerKey = &FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4_DISCARD; + else if(layerID == FWPS_LAYER_ALE_FLOW_ESTABLISHED_V6) + pLayerKey = &FWPM_LAYER_ALE_FLOW_ESTABLISHED_V6; + else if(layerID == FWPS_LAYER_ALE_FLOW_ESTABLISHED_V6_DISCARD) + pLayerKey = &FWPM_LAYER_ALE_FLOW_ESTABLISHED_V6_DISCARD; + +#if(NTDDI_VERSION >= NTDDI_WIN7) + + else if(layerID == FWPS_LAYER_NAME_RESOLUTION_CACHE_V4) + pLayerKey = &FWPM_LAYER_NAME_RESOLUTION_CACHE_V4; + else if(layerID == FWPS_LAYER_NAME_RESOLUTION_CACHE_V6) + pLayerKey = &FWPM_LAYER_NAME_RESOLUTION_CACHE_V6; + else if(layerID == FWPS_LAYER_ALE_RESOURCE_RELEASE_V4) + pLayerKey = &FWPM_LAYER_ALE_RESOURCE_RELEASE_V4; + else if(layerID == FWPS_LAYER_ALE_RESOURCE_RELEASE_V6) + pLayerKey = &FWPM_LAYER_ALE_RESOURCE_RELEASE_V6; + else if(layerID == FWPS_LAYER_ALE_ENDPOINT_CLOSURE_V4) + pLayerKey = &FWPM_LAYER_ALE_ENDPOINT_CLOSURE_V4; + else if(layerID == FWPS_LAYER_ALE_ENDPOINT_CLOSURE_V6) + pLayerKey = &FWPM_LAYER_ALE_ENDPOINT_CLOSURE_V6; + else if(layerID == FWPS_LAYER_ALE_CONNECT_REDIRECT_V4) + pLayerKey = &FWPM_LAYER_ALE_CONNECT_REDIRECT_V4; + else if(layerID == FWPS_LAYER_ALE_CONNECT_REDIRECT_V6) + pLayerKey = &FWPM_LAYER_ALE_CONNECT_REDIRECT_V6; + else if(layerID == FWPS_LAYER_ALE_BIND_REDIRECT_V4) + pLayerKey = &FWPM_LAYER_ALE_BIND_REDIRECT_V4; + else if(layerID == FWPS_LAYER_ALE_BIND_REDIRECT_V6) + pLayerKey = &FWPM_LAYER_ALE_BIND_REDIRECT_V6; + else if(layerID == FWPS_LAYER_STREAM_PACKET_V4) + pLayerKey = &FWPM_LAYER_STREAM_PACKET_V4; + else if(layerID == FWPS_LAYER_STREAM_PACKET_V6) + pLayerKey = &FWPM_LAYER_STREAM_PACKET_V6; + +#if(NTDDI_VERSION >= NTDDI_WIN8) + + else if(layerID == FWPS_LAYER_INBOUND_MAC_FRAME_ETHERNET) + pLayerKey = &FWPM_LAYER_INBOUND_MAC_FRAME_ETHERNET; + else if(layerID == FWPS_LAYER_OUTBOUND_MAC_FRAME_ETHERNET) + pLayerKey = &FWPM_LAYER_OUTBOUND_MAC_FRAME_ETHERNET; + else if(layerID == FWPS_LAYER_INBOUND_MAC_FRAME_NATIVE) + pLayerKey = &FWPM_LAYER_INBOUND_MAC_FRAME_NATIVE; + else if(layerID == FWPS_LAYER_OUTBOUND_MAC_FRAME_NATIVE) + pLayerKey = &FWPM_LAYER_OUTBOUND_MAC_FRAME_NATIVE; + else if(layerID == FWPS_LAYER_INGRESS_VSWITCH_ETHERNET) + pLayerKey = &FWPM_LAYER_INGRESS_VSWITCH_ETHERNET; + else if(layerID == FWPS_LAYER_EGRESS_VSWITCH_ETHERNET) + pLayerKey = &FWPM_LAYER_EGRESS_VSWITCH_ETHERNET; + else if(layerID == FWPS_LAYER_INGRESS_VSWITCH_TRANSPORT_V4) + pLayerKey = &FWPM_LAYER_INGRESS_VSWITCH_TRANSPORT_V4; + else if(layerID == FWPS_LAYER_INGRESS_VSWITCH_TRANSPORT_V6) + pLayerKey = &FWPM_LAYER_INGRESS_VSWITCH_TRANSPORT_V6; + else if(layerID == FWPS_LAYER_EGRESS_VSWITCH_TRANSPORT_V4) + pLayerKey = &FWPM_LAYER_EGRESS_VSWITCH_TRANSPORT_V4; + else if(layerID == FWPS_LAYER_EGRESS_VSWITCH_TRANSPORT_V6) + pLayerKey = &FWPM_LAYER_EGRESS_VSWITCH_TRANSPORT_V6; + +#if(NTDDI_VERSION >= NTDDI_WINBLUE) + + else if(layerID == FWPS_LAYER_INBOUND_TRANSPORT_FAST) + pLayerKey = &FWPM_LAYER_INBOUND_TRANSPORT_FAST; + else if(layerID == FWPS_LAYER_OUTBOUND_TRANSPORT_FAST) + pLayerKey = &FWPM_LAYER_OUTBOUND_TRANSPORT_FAST; + else if(layerID == FWPS_LAYER_INBOUND_MAC_FRAME_NATIVE_FAST) + pLayerKey = &FWPM_LAYER_INBOUND_MAC_FRAME_NATIVE_FAST; + else if(layerID == FWPS_LAYER_OUTBOUND_MAC_FRAME_NATIVE_FAST) + pLayerKey = &FWPM_LAYER_OUTBOUND_MAC_FRAME_NATIVE_FAST; + +#endif // (NTDDI_VERSION >= NTDDI_WINBLUE) +#endif // (NTDDI_VERSION >= NTDDI_WIN8) +#endif // (NTDDI_VERSION >= NTDDI_WIN7) + + return pLayerKey; +} + +/** + @helper_function="HlprFwpmLayerGetByString" + + Purpose: Return a pointer to the GUID of the layer represented by the provided string. <br> + <br> + Notes: Calling function must check for NULL pointer. <br> + <br> + MSDN_Ref: HTTP://MSDN.Microsoft.com/En-US/Library/Windows/Desktop/AA366492.aspx <br> +*/ +_Success_(return != 0) +const GUID* HlprFwpmLayerGetByString(_In_ PCWSTR pLayerString) +{ + ASSERT(pLayerString); + + const GUID* pLayerKey = 0; + + if(HlprStringsAreEqual(L"FWPM_LAYER_INBOUND_IPPACKET_V4", + pLayerString)) + pLayerKey = &FWPM_LAYER_INBOUND_IPPACKET_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_INBOUND_IPPACKET_V4_DISCARD", + pLayerString)) + pLayerKey = &FWPM_LAYER_INBOUND_IPPACKET_V4_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_INBOUND_IPPACKET_V6", + pLayerString)) + pLayerKey = &FWPM_LAYER_INBOUND_IPPACKET_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_INBOUND_IPPACKET_V6_DISCARD", + pLayerString)) + pLayerKey = &FWPM_LAYER_INBOUND_IPPACKET_V6_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_OUTBOUND_IPPACKET_V4", + pLayerString)) + pLayerKey = &FWPM_LAYER_OUTBOUND_IPPACKET_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_OUTBOUND_IPPACKET_V4_DISCARD", + pLayerString)) + pLayerKey = &FWPM_LAYER_OUTBOUND_IPPACKET_V4_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_OUTBOUND_IPPACKET_V6", + pLayerString)) + pLayerKey = &FWPM_LAYER_OUTBOUND_IPPACKET_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_OUTBOUND_IPPACKET_V6_DISCARD", + pLayerString)) + pLayerKey = &FWPM_LAYER_OUTBOUND_IPPACKET_V6_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_IPFORWARD_V4", + pLayerString)) + pLayerKey = &FWPM_LAYER_IPFORWARD_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_IPFORWARD_V4_DISCARD", + pLayerString)) + pLayerKey = &FWPM_LAYER_IPFORWARD_V4_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_IPFORWARD_V6", + pLayerString)) + pLayerKey = &FWPM_LAYER_IPFORWARD_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_IPFORWARD_V6_DISCARD", + pLayerString)) + pLayerKey = &FWPM_LAYER_IPFORWARD_V6_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_INBOUND_TRANSPORT_V4", + pLayerString)) + pLayerKey = &FWPM_LAYER_INBOUND_TRANSPORT_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_INBOUND_TRANSPORT_V4_DISCARD", + pLayerString)) + pLayerKey = &FWPM_LAYER_INBOUND_TRANSPORT_V4_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_INBOUND_TRANSPORT_V6", + pLayerString)) + pLayerKey = &FWPM_LAYER_INBOUND_TRANSPORT_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_INBOUND_TRANSPORT_V6_DISCARD", + pLayerString)) + pLayerKey = &FWPM_LAYER_INBOUND_TRANSPORT_V6_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_OUTBOUND_TRANSPORT_V4", + pLayerString)) + pLayerKey = &FWPM_LAYER_OUTBOUND_TRANSPORT_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_OUTBOUND_TRANSPORT_V4_DISCARD", + pLayerString)) + pLayerKey = &FWPM_LAYER_OUTBOUND_TRANSPORT_V4_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_OUTBOUND_TRANSPORT_V6", + pLayerString)) + pLayerKey = &FWPM_LAYER_OUTBOUND_TRANSPORT_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_OUTBOUND_TRANSPORT_V6_DISCARD", + pLayerString)) + pLayerKey = &FWPM_LAYER_OUTBOUND_TRANSPORT_V6_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_STREAM_V4", + pLayerString)) + pLayerKey = &FWPM_LAYER_STREAM_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_STREAM_V4_DISCARD", + pLayerString)) + pLayerKey = &FWPM_LAYER_STREAM_V4_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_STREAM_V6", + pLayerString)) + pLayerKey = &FWPM_LAYER_STREAM_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_STREAM_V6_DISCARD", + pLayerString)) + pLayerKey = &FWPM_LAYER_STREAM_V6_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_DATAGRAM_DATA_V4", + pLayerString)) + pLayerKey = &FWPM_LAYER_DATAGRAM_DATA_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_DATAGRAM_DATA_V4_DISCARD", + pLayerString)) + pLayerKey = &FWPM_LAYER_DATAGRAM_DATA_V4_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_DATAGRAM_DATA_V6", + pLayerString)) + pLayerKey = &FWPM_LAYER_DATAGRAM_DATA_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_DATAGRAM_DATA_V6_DISCARD", + pLayerString)) + pLayerKey = &FWPM_LAYER_DATAGRAM_DATA_V6_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_INBOUND_ICMP_ERROR_V4", + pLayerString)) + pLayerKey = &FWPM_LAYER_INBOUND_ICMP_ERROR_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_INBOUND_ICMP_ERROR_V4_DISCARD", + pLayerString)) + pLayerKey = &FWPM_LAYER_INBOUND_ICMP_ERROR_V4_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_INBOUND_ICMP_ERROR_V6", + pLayerString)) + pLayerKey = &FWPM_LAYER_INBOUND_ICMP_ERROR_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_INBOUND_ICMP_ERROR_V6_DISCARD", + pLayerString)) + pLayerKey = &FWPM_LAYER_INBOUND_ICMP_ERROR_V6_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_OUTBOUND_ICMP_ERROR_V4", + pLayerString)) + pLayerKey = &FWPM_LAYER_OUTBOUND_ICMP_ERROR_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_OUTBOUND_ICMP_ERROR_V4_DISCARD", + pLayerString)) + pLayerKey = &FWPM_LAYER_OUTBOUND_ICMP_ERROR_V4_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_OUTBOUND_ICMP_ERROR_V6", + pLayerString)) + pLayerKey = &FWPM_LAYER_OUTBOUND_ICMP_ERROR_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_OUTBOUND_ICMP_ERROR_V6_DISCARD", + pLayerString)) + pLayerKey = &FWPM_LAYER_OUTBOUND_ICMP_ERROR_V6_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V4", + pLayerString)) + pLayerKey = &FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V4_DISCARD", + pLayerString)) + pLayerKey = &FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V4_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V6", + pLayerString)) + pLayerKey = &FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V6_DISCARD", + pLayerString)) + pLayerKey = &FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V6_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_AUTH_LISTEN_V4", + pLayerString)) + pLayerKey = &FWPM_LAYER_ALE_AUTH_LISTEN_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_AUTH_LISTEN_V4_DISCARD", + pLayerString)) + pLayerKey = &FWPM_LAYER_ALE_AUTH_LISTEN_V4_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_AUTH_LISTEN_V6", + pLayerString)) + pLayerKey = &FWPM_LAYER_ALE_AUTH_LISTEN_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_AUTH_LISTEN_V6_DISCARD", + pLayerString)) + pLayerKey = &FWPM_LAYER_ALE_AUTH_LISTEN_V6_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V4", + pLayerString)) + pLayerKey = &FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V4_DISCARD", + pLayerString)) + pLayerKey = &FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V4_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V6", + pLayerString)) + pLayerKey = &FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V6_DISCARD", + pLayerString)) + pLayerKey = &FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V6_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_AUTH_CONNECT_V4", + pLayerString)) + pLayerKey = &FWPM_LAYER_ALE_AUTH_CONNECT_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_AUTH_CONNECT_V4_DISCARD", + pLayerString)) + pLayerKey = &FWPM_LAYER_ALE_AUTH_CONNECT_V4_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_AUTH_CONNECT_V6", + pLayerString)) + pLayerKey = &FWPM_LAYER_ALE_AUTH_CONNECT_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_AUTH_CONNECT_V6_DISCARD", + pLayerString)) + pLayerKey = &FWPM_LAYER_ALE_AUTH_CONNECT_V6_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4", + pLayerString)) + pLayerKey = &FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4_DISCARD", + pLayerString)) + pLayerKey = &FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4_DISCARD; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_FLOW_ESTABLISHED_V6", + pLayerString)) + pLayerKey = &FWPM_LAYER_ALE_FLOW_ESTABLISHED_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_FLOW_ESTABLISHED_V6_DISCARD", + pLayerString)) + pLayerKey = &FWPM_LAYER_ALE_FLOW_ESTABLISHED_V6_DISCARD; + +#if(NTDDI_VERSION >= NTDDI_WIN7) + + else if(HlprStringsAreEqual(L"FWPM_LAYER_NAME_RESOLUTION_CACHE_V4", + pLayerString)) + pLayerKey = &FWPM_LAYER_NAME_RESOLUTION_CACHE_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_NAME_RESOLUTION_CACHE_V6", + pLayerString)) + pLayerKey = &FWPM_LAYER_NAME_RESOLUTION_CACHE_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_RESOURCE_RELEASE_V4", + pLayerString)) + pLayerKey = &FWPM_LAYER_ALE_RESOURCE_RELEASE_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_RESOURCE_RELEASE_V6", + pLayerString)) + pLayerKey = &FWPM_LAYER_ALE_RESOURCE_RELEASE_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_ENDPOINT_CLOSURE_V4", + pLayerString)) + pLayerKey = &FWPM_LAYER_ALE_ENDPOINT_CLOSURE_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_ENDPOINT_CLOSURE_V6", + pLayerString)) + pLayerKey = &FWPM_LAYER_ALE_ENDPOINT_CLOSURE_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_CONNECT_REDIRECT_V4", + pLayerString)) + pLayerKey = &FWPM_LAYER_ALE_CONNECT_REDIRECT_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_CONNECT_REDIRECT_V6", + pLayerString)) + pLayerKey = &FWPM_LAYER_ALE_CONNECT_REDIRECT_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_BIND_REDIRECT_V4", + pLayerString)) + pLayerKey = &FWPM_LAYER_ALE_BIND_REDIRECT_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_ALE_BIND_REDIRECT_V6", + pLayerString)) + pLayerKey = &FWPM_LAYER_ALE_BIND_REDIRECT_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_STREAM_PACKET_V4", + pLayerString)) + pLayerKey = &FWPM_LAYER_STREAM_PACKET_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_STREAM_PACKET_V6", + pLayerString)) + pLayerKey = &FWPM_LAYER_STREAM_PACKET_V6; + +#if(NTDDI_VERSION >= NTDDI_WIN8) + + else if(HlprStringsAreEqual(L"FWPM_LAYER_INBOUND_MAC_FRAME_ETHERNET", + pLayerString)) + pLayerKey = &FWPM_LAYER_INBOUND_MAC_FRAME_ETHERNET; + else if(HlprStringsAreEqual(L"FWPM_LAYER_OUTBOUND_MAC_FRAME_ETHERNET", + pLayerString)) + pLayerKey = &FWPM_LAYER_OUTBOUND_MAC_FRAME_ETHERNET; + else if(HlprStringsAreEqual(L"FWPM_LAYER_INBOUND_MAC_FRAME_NATIVE", + pLayerString)) + pLayerKey = &FWPM_LAYER_INBOUND_MAC_FRAME_NATIVE; + else if(HlprStringsAreEqual(L"FWPM_LAYER_OUTBOUND_MAC_FRAME_NATIVE", + pLayerString)) + pLayerKey = &FWPM_LAYER_OUTBOUND_MAC_FRAME_NATIVE; + else if(HlprStringsAreEqual(L"FWPM_LAYER_INGRESS_VSWITCH_ETHERNET", + pLayerString)) + pLayerKey = &FWPM_LAYER_INGRESS_VSWITCH_ETHERNET; + else if(HlprStringsAreEqual(L"FWPM_LAYER_EGRESS_VSWITCH_ETHERNET", + pLayerString)) + pLayerKey = &FWPM_LAYER_EGRESS_VSWITCH_ETHERNET; + else if(HlprStringsAreEqual(L"FWPM_LAYER_INGRESS_VSWITCH_TRANSPORT_V4", + pLayerString)) + pLayerKey = &FWPM_LAYER_INGRESS_VSWITCH_TRANSPORT_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_INGRESS_VSWITCH_TRANSPORT_V6", + pLayerString)) + pLayerKey = &FWPM_LAYER_INGRESS_VSWITCH_TRANSPORT_V6; + else if(HlprStringsAreEqual(L"FWPM_LAYER_EGRESS_VSWITCH_TRANSPORT_V4", + pLayerString)) + pLayerKey = &FWPM_LAYER_EGRESS_VSWITCH_TRANSPORT_V4; + else if(HlprStringsAreEqual(L"FWPM_LAYER_EGRESS_VSWITCH_TRANSPORT_V6", + pLayerString)) + pLayerKey = &FWPM_LAYER_EGRESS_VSWITCH_TRANSPORT_V6; + +#if(NTDDI_VERSION >= NTDDI_WINBLUE) + + else if(HlprStringsAreEqual(L"FWPM_LAYER_INBOUND_TRANSPORT_FAST", + pLayerString)) + pLayerKey = &FWPM_LAYER_INBOUND_TRANSPORT_FAST; + else if(HlprStringsAreEqual(L"FWPM_LAYER_OUTBOUND_TRANSPORT_FAST", + pLayerString)) + pLayerKey = &FWPM_LAYER_OUTBOUND_TRANSPORT_FAST; + else if(HlprStringsAreEqual(L"FWPM_LAYER_INBOUND_MAC_FRAME_NATIVE_FAST", + pLayerString)) + pLayerKey = &FWPM_LAYER_INBOUND_MAC_FRAME_NATIVE_FAST; + else if(HlprStringsAreEqual(L"FWPM_LAYER_OUTBOUND_MAC_FRAME_NATIVE_FAST", + pLayerString)) + pLayerKey = &FWPM_LAYER_OUTBOUND_MAC_FRAME_NATIVE_FAST; + +#endif // (NTDDI_VERSION >= NTDDI_WINBLUE) +#endif // (NTDDI_VERSION >= NTDDI_WIN8) +#endif // (NTDDI_VERSION >= NTDDI_WIN7) + + return pLayerKey; +} + +/** + @helper function="HlprFwpmLayerIsUserMode" + + Purpose: Determine if the layer is a user-mode layer. <br> + <br> + Notes: <br> + <br> + MSDN_Ref: <br> +*/ +BOOLEAN HlprFwpmLayerIsUserMode(_In_ const GUID* pLayerKey) +{ + ASSERT(pLayerKey); + + BOOLEAN isUserMode = FALSE; + + for(UINT32 layerIndex = 0; + layerIndex < TOTAL_USER_MODE_LAYER_COUNT && + isUserMode == FALSE; + layerIndex++) + { + if(pLayerKey == ppUserModeLayerKeyArray[layerIndex]) + isUserMode = TRUE; + } + + return isUserMode; +} + +/** + @helper function="HlprFwpmLayerIsKernelMode" + + Purpose: Determine if the layer is a kernel-mode layer. <br> + <br> + Notes: <br> + <br> + MSDN_Ref: <br> +*/ +BOOLEAN HlprFwpmLayerIsKernelMode(_In_ const GUID* pLayerKey) +{ + ASSERT(pLayerKey); + + return !(HlprFwpmLayerIsUserMode(pLayerKey)); +} + +/** + @helper function="HlprFwpmLayerIsIPv4" + + Purpose: Determine if the layer is an IPv4 layer. <br> + <br> + Notes: <br> + <br> + MSDN_Ref: <br> +*/ +BOOLEAN HlprFwpmLayerIsIPv4(_In_ const GUID* pLayerKey) +{ + ASSERT(pLayerKey); + + BOOLEAN isIPv4 = FALSE; + + if(*pLayerKey == FWPM_LAYER_INBOUND_IPPACKET_V4 || + *pLayerKey == FWPM_LAYER_INBOUND_IPPACKET_V4_DISCARD || + *pLayerKey == FWPM_LAYER_OUTBOUND_IPPACKET_V4 || + *pLayerKey == FWPM_LAYER_OUTBOUND_IPPACKET_V4_DISCARD || + *pLayerKey == FWPM_LAYER_IPFORWARD_V4 || + *pLayerKey == FWPM_LAYER_IPFORWARD_V4_DISCARD || + *pLayerKey == FWPM_LAYER_INBOUND_TRANSPORT_V4 || + *pLayerKey == FWPM_LAYER_INBOUND_TRANSPORT_V4_DISCARD || + *pLayerKey == FWPM_LAYER_OUTBOUND_TRANSPORT_V4 || + *pLayerKey == FWPM_LAYER_OUTBOUND_TRANSPORT_V4_DISCARD || + *pLayerKey == FWPM_LAYER_STREAM_V4 || + *pLayerKey == FWPM_LAYER_STREAM_V4_DISCARD || + *pLayerKey == FWPM_LAYER_DATAGRAM_DATA_V4 || + *pLayerKey == FWPM_LAYER_DATAGRAM_DATA_V4_DISCARD || + *pLayerKey == FWPM_LAYER_INBOUND_ICMP_ERROR_V4 || + *pLayerKey == FWPM_LAYER_INBOUND_ICMP_ERROR_V4_DISCARD || + *pLayerKey == FWPM_LAYER_OUTBOUND_ICMP_ERROR_V4 || + *pLayerKey == FWPM_LAYER_OUTBOUND_ICMP_ERROR_V4_DISCARD || + *pLayerKey == FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V4 || + *pLayerKey == FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V4_DISCARD || + *pLayerKey == FWPM_LAYER_ALE_AUTH_LISTEN_V4 || + *pLayerKey == FWPM_LAYER_ALE_AUTH_LISTEN_V4_DISCARD || + *pLayerKey == FWPM_LAYER_ALE_AUTH_CONNECT_V4 || + *pLayerKey == FWPM_LAYER_ALE_AUTH_CONNECT_V4_DISCARD || + *pLayerKey == FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V4 || + *pLayerKey == FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V4_DISCARD || + *pLayerKey == FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4 || + *pLayerKey == FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4_DISCARD || + +#if(NTDDI_VERSION >= NTDDI_WIN7) + + *pLayerKey == FWPM_LAYER_NAME_RESOLUTION_CACHE_V4 || + *pLayerKey == FWPM_LAYER_ALE_RESOURCE_RELEASE_V4 || + *pLayerKey == FWPM_LAYER_ALE_ENDPOINT_CLOSURE_V4 || + *pLayerKey == FWPM_LAYER_ALE_CONNECT_REDIRECT_V4 || + *pLayerKey == FWPM_LAYER_ALE_BIND_REDIRECT_V4 || + *pLayerKey == FWPM_LAYER_STREAM_PACKET_V4 || + +#if(NTDDI_VERSION >= NTDDI_WIN8) + + *pLayerKey == FWPM_LAYER_INGRESS_VSWITCH_TRANSPORT_V4 || + *pLayerKey == FWPM_LAYER_EGRESS_VSWITCH_TRANSPORT_V4 || + +#endif // (NTDDI_VERSION >= NTDDI_WIN8) +#endif // (NTDDI_VERSION >= NTDDI_WIN7) + + *pLayerKey == FWPM_LAYER_IPSEC_KM_DEMUX_V4 || + *pLayerKey == FWPM_LAYER_IPSEC_V4 || + *pLayerKey == FWPM_LAYER_IKEEXT_V4) + isIPv4 = TRUE; + + return isIPv4; +} + +/** + @helper function="HlprFwpmLayerIsIPv6" + + Purpose: Determine if the layer is an IPv6 layer. <br> + <br> + Notes: <br> + <br> + MSDN_Ref: <br> +*/ +BOOLEAN HlprFwpmLayerIsIPv6(_In_ const GUID* pLayerKey) +{ + ASSERT(pLayerKey); + + BOOLEAN isIPv6 = FALSE; + + if(*pLayerKey == FWPM_LAYER_INBOUND_IPPACKET_V6 || + *pLayerKey == FWPM_LAYER_INBOUND_IPPACKET_V6_DISCARD || + *pLayerKey == FWPM_LAYER_OUTBOUND_IPPACKET_V6 || + *pLayerKey == FWPM_LAYER_OUTBOUND_IPPACKET_V6_DISCARD || + *pLayerKey == FWPM_LAYER_IPFORWARD_V6 || + *pLayerKey == FWPM_LAYER_IPFORWARD_V6_DISCARD || + *pLayerKey == FWPM_LAYER_INBOUND_TRANSPORT_V6 || + *pLayerKey == FWPM_LAYER_INBOUND_TRANSPORT_V6_DISCARD || + *pLayerKey == FWPM_LAYER_OUTBOUND_TRANSPORT_V6 || + *pLayerKey == FWPM_LAYER_OUTBOUND_TRANSPORT_V6_DISCARD || + *pLayerKey == FWPM_LAYER_STREAM_V6 || + *pLayerKey == FWPM_LAYER_STREAM_V6_DISCARD || + *pLayerKey == FWPM_LAYER_DATAGRAM_DATA_V6 || + *pLayerKey == FWPM_LAYER_DATAGRAM_DATA_V6_DISCARD || + *pLayerKey == FWPM_LAYER_INBOUND_ICMP_ERROR_V6 || + *pLayerKey == FWPM_LAYER_INBOUND_ICMP_ERROR_V6_DISCARD || + *pLayerKey == FWPM_LAYER_OUTBOUND_ICMP_ERROR_V6 || + *pLayerKey == FWPM_LAYER_OUTBOUND_ICMP_ERROR_V6_DISCARD || + *pLayerKey == FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V6 || + *pLayerKey == FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V6_DISCARD || + *pLayerKey == FWPM_LAYER_ALE_AUTH_LISTEN_V6 || + *pLayerKey == FWPM_LAYER_ALE_AUTH_LISTEN_V6_DISCARD || + *pLayerKey == FWPM_LAYER_ALE_AUTH_CONNECT_V6 || + *pLayerKey == FWPM_LAYER_ALE_AUTH_CONNECT_V6_DISCARD || + *pLayerKey == FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V6 || + *pLayerKey == FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V6_DISCARD || + *pLayerKey == FWPM_LAYER_ALE_FLOW_ESTABLISHED_V6 || + *pLayerKey == FWPM_LAYER_ALE_FLOW_ESTABLISHED_V6_DISCARD || + +#if(NTDDI_VERSION >= NTDDI_WIN7) + + *pLayerKey == FWPM_LAYER_NAME_RESOLUTION_CACHE_V6 || + *pLayerKey == FWPM_LAYER_ALE_RESOURCE_RELEASE_V6 || + *pLayerKey == FWPM_LAYER_ALE_ENDPOINT_CLOSURE_V6 || + *pLayerKey == FWPM_LAYER_ALE_CONNECT_REDIRECT_V6 || + *pLayerKey == FWPM_LAYER_ALE_BIND_REDIRECT_V6 || + *pLayerKey == FWPM_LAYER_STREAM_PACKET_V6 || + +#if(NTDDI_VERSION >= NTDDI_WIN8) + + *pLayerKey == FWPM_LAYER_INGRESS_VSWITCH_TRANSPORT_V6 || + *pLayerKey == FWPM_LAYER_EGRESS_VSWITCH_TRANSPORT_V6 || + +#endif // (NTDDI_VERSION >= NTDDI_WIN8) +#endif // (NTDDI_VERSION >= NTDDI_WIN7) + + *pLayerKey == FWPM_LAYER_IPSEC_KM_DEMUX_V6 || + *pLayerKey == FWPM_LAYER_IPSEC_V6 || + *pLayerKey == FWPM_LAYER_IKEEXT_V6) + isIPv6 = TRUE; + + return isIPv6; +} |
