NDIS LWF 驱动程序导致网络堆栈中的 WFP 驱动程序出现问题?

NDIS LWF driver causing issues for WFP drivers in the network stack?

我写了一个 NDIS LWF 驱动程序,收集 send/recv 个数据包,并将它们发送给用户服务,用户服务标记那些 OK,然后我们 indicate/send 这些数据包被标记为 OK。请注意,我们首先在 LWF 回调中使用 NdisFSendNetBufferListComplete(在发送的情况下)和 NdisFIndicateREceiveNetBufferLists(在接收的情况下),然后我们将数据包发送给用户,最后 send/indicate 标记为 OK 的数据包.

但我注意到这导致 windows 10 的任务管理器在进程选项卡中的每个进程中显示其网络使用率为 0%,即使它们不是 0%。当我关闭驱动程序时,它得到修复。

但奇怪的是,在性能->以太网选项卡和资源监控程序中,他并没有出现,而且它们都显示了实际的网络使用情况。

请问这是什么原因造成的,为什么资源监视器和网络选项卡仍然可以看到网络使用情况?我认为这可能与资源监视器使用 NDIS 过滤器和进程选项卡中的网络使用使用 WFP 这一事实有关,但我不确定。

你的driver打电话给NdisCopySendNetBufferListInfoNdisCopyRecieveNetBufferListInfo吗?

per-app 会计确实使用 WFP 标注进行跟踪。网络堆栈顶部有一个 WFP 标注,将应用程序标识附加到每个 NET_BUFFER_LIST。在网络堆栈底部(最靠近硬件)还有另一个 WFP 标注,它执行实际的 byte-counting 并对每个应用程序的网络消耗进行计费。

如果您只是简单地克隆 NET_BUFFER_LIST,默认情况下不会复制附加到 NET_BUFFER_LIST 的应用标识。您还需要调用 NdisCopySendNetBufferListInfoNdisCopyRecieveNetBufferListInfo 之一来复制该元数据。

巧合的是,昨天还有另一个 NDIS 问题,我为此写了同样的答案;)。所以与其再写一遍,你可以参考我在这里写的:Send doesn't work properly in my NDIS modifying filter driver