数据偏移位置

当筛选器引擎调用标注驱动程序的 分类Fn 标注函数时,它会将指针传递给 layerData 参数中的结构。 对于筛选数据包数据的层,指针引用 NET_BUFFER_LIST 结构。 根据调用 classifyFn 标注函数的筛选层,筛选器引擎将 layerData* 参数中的指针传递给以下结构之一:

注释

layerData 参数可能是 NULL,具体取决于要筛选的层以及调用驱动程序的 classifyFn 标注函数的条件。

NET_BUFFER_LIST结构包含NET_BUFFER结构的链接列表。 在每个NET_BUFFER结构中的NET_BUFFER_DATA结构内,DataOffset成员指示数据包数据中的特定位置。 DataOffset 成员指向的位置取决于筛选器引擎调用标注驱动程序的分类Fn 标注函数的筛选层。

对于每个筛选层, DataOffset 成员指定的数据包数据中的位置定义如下:

运行时筛选层标识符(从 Windows Vista 开始) 数据包数据中的位置

FWPS_LAYER_INBOUND_IPPACKET_V4

FWPS_LAYER_INBOUND_IPPACKET_V6

传输标头的开头。

FWPS_LAYER_INBOUND_IPPACKET_V4_DISCARD

FWPS_LAYER_INBOUND_IPPACKET_V6_DISCARD

TCP/IP 堆栈停止处理的偏移量。

FWPS_LAYER_OUTBOUND_IPPACKET_V4

FWPS_LAYER_OUTBOUND_IPPACKET_V6

IP 标头的开头。

FWPS_LAYER_OUTBOUND_IPPACKET_V4_DISCARD

FWPS_LAYER_OUTBOUND_IPPACKET_V6_DISCARD

TCP/IP 堆栈停止处理的偏移量。

FWPS_LAYER_IPFORWARD_V4

FWPS_LAYER_IPFORWARD_V6

IP 标头的开头。

FWPS_LAYER_IPFORWARD_V4_DISCARD

FWPS_LAYER_IPFORWARD_V6_DISCARD

IP 标头的开头。

FWPS_LAYER_INBOUND_TRANSPORT_V4

FWPS_LAYER_INBOUND_TRANSPORT_V6

数据的开头。

注意 对于 TCP/IP 堆栈 ICMP 套接字上收到的入站数据包,偏移量是 ICMP 标头的开头。
 

FWPS_LAYER_INBOUND_TRANSPORT_V4_DISCARD

FWPS_LAYER_INBOUND_TRANSPORT_V6_DISCARD

数据的开头。

注意 对于 TCP/IP 堆栈 ICMP 套接字上收到的入站数据包,偏移量是 ICMP 标头的开头。
 

FWPS_LAYER_OUTBOUND_TRANSPORT_V4

FWPS_LAYER_OUTBOUND_TRANSPORT_V6

传输标头的开头。

FWPS_LAYER_OUTBOUND_TRANSPORT_V4_DISCARD

FWPS_LAYER_OUTBOUND_TRANSPORT_V6_DISCARD

传输标头的开头。

FWPS_LAYER_STREAM_V4

FWPS_LAYER_STREAM_V6

数据的开头。

注意 数据包数据中的位置不包含 IP、IPv6 和传输标头。
 

FWPS_LAYER_STREAM_V4_DISCARD

FWPS_LAYER_STREAM_V6_DISCARD

数据的起始部分。

注意 数据包数据中的位置不包含 IP、IPv6 或传输标头。
 

FWPS_LAYER_DATAGRAM_DATA_V4

FWPS_LAYER_DATAGRAM_DATA_V6

对于入站数据报:数据的开头。

注意 对于 TCP/IP 堆栈 ICMP 套接字上收到的入站数据包,偏移量是 ICMP 标头的开头。
 

对于出站数据报:传输标头的开头。

FWPS_LAYER_DATAGRAM_DATA_V4_DISCARD

FWPS_LAYER_DATAGRAM_DATA_V6_DISCARD

对于入站数据报:数据的开头。

注意 对于 TCP/IP 堆栈 ICMP 套接字上收到的入站数据包,偏移量是 ICMP 标头的开头。
 

对于出站数据报:传输标头的开头。

FWPS_LAYER_INBOUND_ICMP_ERROR_V4

FWPS_LAYER_INBOUND_ICMP_ERROR_V6

内部 IP 标头的开头。

FWPS_LAYER_INBOUND_ICMP_ERROR_V4_DISCARD

FWPS_LAYER_INBOUND_ICMP_ERROR_V6_DISCARD

内部 IP 标头的开头。

FWPS_LAYER_OUTBOUND_ICMP_ERROR_V4

FWPS_LAYER_OUTBOUND_ICMP_ERROR_V6

ICMP 标头的开头。

FWPS_LAYER_OUTBOUND_ICMP_ERROR_V4_DISCARD

FWPS_LAYER_OUTBOUND_ICMP_ERROR_V6_DISCARD

ICMP 标头的开头。

FWPS_LAYER_ALE_RESOURCE_ASSIGNMENT_V4 (分配资源层)

FWPS_LAYER_ALE_RESOURCE_ASSIGNMENT_V6

不適用。

FWPS_LAYER_ALE_RESOURCE_ASSIGNMENT_V4_DISCARD

FWPS_LAYER_ALE_RESOURCE_ASSIGNMENT_V6_DISCARD

不適用。

FWPS_LAYER_ALE_AUTH_LISTEN_V4

FWPS_LAYER_ALE_AUTH_LISTEN_V6

不適用。

FWPS_LAYER_ALE_AUTH_LISTEN_V4_DISCARD

FWPS_LAYER_ALE_AUTH_LISTEN_V6_DISCARD

不適用。

FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V4

FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V6

对于入站数据包方向:数据的开头。

注意 对于 TCP/IP 协议栈 ICMP 套接字上收到的入站数据包,偏移量是 ICMP 标头的开头。
 

对于出站数据包方向:传输标头的开头。

FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V4_DISCARD

FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V6_DISCARD

对于入站数据包方向:数据的开头。

注意 对于通过 TCP/IP 协议栈上的 ICMP 套接字接收到的入站数据包,偏移量是 ICMP 头的起始位置。
 

对于出站数据包方向:传输标头的开头。

FWPS_LAYER_ALE_AUTH_CONNECT_V4

FWPS_LAYER_ALE_AUTH_CONNECT_V6

对于非 TCP 流量:传输标头的开头。

对于 TCP 流量:不适用。

FWPS层_ALE_AUTH_CONNECT_V4丢弃

FWPS_LAYER_ALE_AUTH_CONNECT_V6_DISCARD

对于非 TCP 流量:传输标头的开头。

对于 TCP 流量:不适用。

FWPS_LAYER_ALE_FLOW_ESTABLISHED_V4

FWPS_LAYER_ALE_FLOW_ESTABLISHED_V6

对于入站数据包方向:数据的开头。

注意 对于通过 TCP/IP 协议栈上的 ICMP 套接字接收到的入站数据包,偏移量是 ICMP 头的起始位置。
 

对于出站数据包方向:传输标头的开头。

FWPS_LAYER_ALE_FLOW_ESTABLISHED_V4_DISCARD

FWPS_LAYER_ALE_FLOW_ESTABLISHED_V6_DISCARD

对于入站数据包方向:数据的开头。

注意 对于通过 TCP/IP 协议栈上的 ICMP 套接字接收到的入站数据包,偏移量是 ICMP 头的起始位置。
 

对于出站数据包方向:传输标头的开头。

FWPS_LAYER_IPSEC_KM_DEMUX_V4

FWPS_LAYER_IPSEC_KM_DEMUX_V6

不適用。

FWPS_LAYER_IPSEC_V4

FWPS_LAYER_IPSEC_V6

不適用。

FWPS_LAYER_IKEEXT_V4

FWPS_LAYER_IKEEXT_V6

不適用。

FWPS_LAYER_RPC_UM

不適用。

FWPS_LAYER_RPC_EPMAP

不適用。

FWPS_LAYER_RPC_EP_ADD

不適用。

FWPS_LAYER_RPC_PROXY_CONN

不適用。

FWPS_LAYER_RPC_PROXY_IF

不適用。

运行时筛选层标识符(从 Windows 7 开始) 数据包数据中的位置

FWPS_LAYER_NAME_RESOLUTION_CACHE_V4

FWPS_LAYER_NAME_RESOLUTION_CACHE_V6 (名称解析缓存层V6)

不適用。

FWPS_LAYER_ALE_RESOURCE_RELEASE_V4

FWPS_LAYER_ALE_RESOURCE_RELEASE_V6

不適用。

FWPS_LAYER_ALE_ENDPOINT_CLOSURE_V4

FWPS_LAYER_ALE_ENDPOINT_CLOSURE_V6

不適用。

FWPS_LAYER_ALE_CONNECT_REDIRECT_V4

FWPS_LAYER_ALE_CONNECT_REDIRECT_V6(连接重定向层)

不適用。

注意 对于这些筛选层, layerData 参数包含指向 FWPS_CONNECT_REQUEST0 结构的指针。 此结构不引用描述数据包数据的 NET_BUFFER_LIST 结构。
 

FWPS_LAYER_ALE_BIND_REDIRECT_V4

FWPS_LAYER_ALE_BIND_REDIRECT_V6

不適用。

注意 对于这些筛选层, layerData 参数包含指向 FWPS_BIND_REQUEST0 结构的指针。 此结构不引用描述数据包数据的 NET_BUFFER_LIST 结构。
 

FWPS_LAYER_STREAM_PACKET_V4

FWPS_LAYER_STREAM_PACKET_V6

对于入站数据包方向:数据的开头。

对于出站数据包方向:传输标头的开头。

FWPS_LAYER_KM_AUTHORIZATION

不適用。

运行时筛选层标识符(从 Windows 8 开始) 数据包数据中的位置

FWPS_LAYER_INBOUND_MAC_FRAME_ETHERNET

IP 标头的开头。

FWPS_LAYER_OUTBOUND_MAC_FRAME_ETHERNET

MAC 标头的开头。

FWPS_LAYER_INBOUND_MAC_FRAME_NATIVE

MAC 标头的开头。

FWPS_LAYER_OUTBOUND_MAC_FRAME_NATIVE

MAC 标头的开头。

FWPS_LAYER_INGRESS_VSWITCH_ETHERNET

以太网标头的开头。

FWPS_LAYER_EGRESS_VSWITCH_ETHERNET

以太网标头的开头。

FWPS_LAYER_INGRESS_VSWITCH_TRANSPORT_V4

IP 标头的开头。

FWPS_LAYER_INGRESS_VSWITCH_TRANSPORT_V6

IP 标头的开头。

FWPS_LAYER_EGRESS_VSWITCH_TRANSPORT_V4

IP 标头的开头。

FWPS_LAYER_EGRESS_VSWITCH_TRANSPORT_V6

IP 标头的开头。