我正在尝试编写一个Windows内核驱动程序,它需要使用NDIS 5/6进行tcp / ip通信。因为它将使用NDIS,据我所知,它需要它自己的tcp / ip堆栈实现。
有人能指出我实施这个的方向,还是接近它的方法?
非常感谢任何帮助!
亲切的问候
答案 0 :(得分:2)
您不需要实现自己的TCP / IP堆栈!
首先,你确定这需要在驱动程序中完成吗?您的所有复杂代码和业务逻辑通常应位于用户模式应用程序或服务中。驱动程序主要是围绕硬件非常简单的包装器。此规则不仅仅是一些抽象原则 - 编写用户模式代码要容易得多,您可以使用熟悉的调试器和更广泛的Win32 API集。如果您可以将大部分代码移动到用户模式,您将很快解决问题。
如果你真的必须在内核模式下进行TCP套接字I / O,那么你应该使用Winsock Kernel (WSK)。 WSK允许您打开一个套接字,类似于用户模式中的Winsock。 (虽然用户模式Winsock API有更多的选项和功能; WSK很简单。)
WSK可在Windows Vista及更高版本上使用。如果必须支持Windows XP,则需要使用TDI。 TDI很难做到正确;如果可以避免,我不推荐使用它。