带 tcp/ip 堆栈的 NDIS 5/6 驱动程序,有代码吗?
我正在尝试编写一个 Windows 内核驱动程序,它需要使用 NDIS 5/6 进行 tcp/ip 通信。据我了解,由于它将使用 NDIS,因此它需要自己的 tcp/ip 堆栈实现。
谁能指出我的实现方向,或者类似的东西?
任何帮助将不胜感激!
亲切的问候
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您不需要实现自己的 TCP/IP 堆栈!
首先,您确定这需要在驱动程序中完成吗?所有复杂的代码和业务逻辑通常应该位于用户模式应用程序或服务中。驱动程序主要是硬件的非常简单的包装。该规则也不仅仅是一些抽象原则 - 编写用户模式代码要容易得多,您可以在其中使用熟悉的调试器和更广泛的 Win32 API 集。如果您可以将大部分代码移至用户模式,您将更快地解决问题。
如果您确实必须在内核模式下执行 TCP 套接字 I/O,那么您应该使用 Winsock 内核 (WSK)。 WSK 允许您打开套接字,类似于用户模式下的 Winsock。 (尽管用户模式 Winsock API 有更多选项和功能;WSK 是最基本的)。
WSK 可在 Windows Vista 及更高版本上使用。如果必须支持Windows XP,那么就需要使用TDI。 TDI 更难获得正确的结果;如果可以避免的话,我不建议使用它。
You don't need to implement your own TCP/IP stack!
First, are you sure that this needs to be done in a driver? All your complex code and business logic should usually be in a usermode application or service. Drivers are mostly meant to be very simple wrappers around hardware. This rule isn't just some abstract principle either — it's much easier to write usermode code, where you can use a familiar debugger and the much-broader set of Win32 APIs. You'll solve your problem sooner if you can move most of your code to usermode.
If you really must do TCP socket I/O in kernel mode, then you should use Winsock Kernel (WSK). WSK allows you to open a socket, similar to Winsock in usermode. (Although the usermode Winsock API has more options and features; WSK is bare-bones).
WSK is available on Windows Vista and later. If you must support Windows XP, then you need to use TDI. TDI is much harder to get right; I don't reccomend using it if you can avoid it.