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