我正在为 Hyper-V 2012 编写标注驱动程序,我需要在其中过滤从虚拟机发送的数据包。
我在 WFP 的 FWPM_LAYER_EGRESS_VSWITCH_TRANSPORT_V4 层添加了过滤器。标注函数接收数据包缓冲区,我将其转换为 NET_BUFFER_LIST。我正在执行以下操作以获取数据指针
pNetBuffer = NET_BUFFER_LIST_FIRST_NB((NET_BUFFER_LIST*)pClassifyData->pPacket); pContiguousData = NdisGetDataBuffer(pNetBuffer, NET_BUFFER_DATA_LENGTH(pNetBuffer), 0, 1, 0);
我有简单的客户端-服务器应用程序来测试数据包数据。客户端在虚拟机上,服务器是另一台机器。正如我所观察到的,从客户端发送到服务器的数据被截断,最后添加了一些垃圾值。从服务器向客户端发送消息没有问题。如果我不添加此层过滤器客户端服务器工作没有任何问题。
回调函数接收包含 ipHeaderSize 和 transportHeaderSize 的元数据。这两个值都为零。这些是正确的值还是应该是非零的?有人可以帮我在标注功能中从数据包中提取数据并将其安全地转发到其他层吗?
谢谢你。