Windows中的I / O模型基于一堆组件。数据必须流经物理网卡和将使用该数据的应用程序之间存在的堆栈的各个组件。有时,这些各种组件在流过堆栈时会检查数据(例如,TCP数据包),并且根据该数据包的内容,可以更改数据,或者可以完全丢弃该数据包。
这是数据包流经的“网络堆栈”的简化模型,以便从应用程序到达网络,反之亦然。
上方屏幕快照中显示的最有趣的组件之一是WFP(Windows筛选平台)标注API。如果我们放大它,它可能看起来像这样:
开发人员可以自由地将自己的模块插入此堆栈中的适当位置。例如,防病毒产品通常使用“过滤器驱动程序”来插入该模型并检查网络流量或提供防火墙功能。Windows防火墙服务显然也适用于此模型。
如果您想编写一个记录网络流量的应用程序(例如Wireshark),那么执行此操作的适当方法是使用您自己的驱动程序,并将其插入到尽可能低的堆栈中,以便它可以检测到网络数据包。在防火墙模块有机会删除它们之前。
因此,此过程涉及许多“驱动程序”。也有许多不同类型的驱动程序。同样,系统上的其他形式的输入/输出,例如硬盘驱动器读和写,也遵循非常相似的模型。
另一个要点-WFP标注并不是暗示您自己进入网络堆栈的唯一方法。以WinPCap为例,它直接通过驱动程序与NDIS交互,这意味着它有机会在进行任何过滤之前就拦截流量。
NDIS驱动程序
WinPCap
参考文献:
Vista +中的下一代TCP / IP堆栈
Windows筛选平台体系结构