【问题标题】:Networking from a Kernel Mode Driver从内核模式驱动程序联网
【发布时间】:2010-08-13 10:40:26
【问题描述】:

这个问题不言自明,我需要能够从 windows xp 中的内核模式驱动程序打开和控制套接字。我知道 vista 和更高版本提供内核模式 winsock 等效项,但 XP 没有这样的东西。

干杯

编辑 我建议让用户模式服务完成套接字工作,并建议使用 TDI。哪个最好?

【问题讨论】:

  • 你真的需要这个吗?我会创建一个用户模式服务,并使用它进行通信。这有什么不可行的原因吗?
  • 如果您觉得用户模式服务是更明智的方法,那么我可以这样做,我认为可能存在性能问题。
  • 内核模式下来自 Internet 的 parson 数据可能存在安全问题。
  • Christoper,您能否将那个用户模式服务建议作为答案,然后我可以接受?这个建议效果很好。

标签: networking windows-xp kernel driver


【解决方案1】:

TDI 不是一个易于使用的界面。它旨在从应用程序中抽象出网络传输驱动程序(TCP、NetBEUI、AppleTalk 等)。您必须完全了解 API 才能将其用于套接字工作——这肯定比编写用户模式服务并与之通信要多得多。您可以从服务向驱动程序发出反向 IRP,以便驱动程序可以在需要时触发通信。

此外,您从驱动程序中移除的复杂性越多(此处为用户模式)越好。

但是,使用用户模式服务将需要一个上下文切换每个数据传输到驱动程序,这对您来说可能是基于每个数据包的。这是最好避免的开销。

我很好奇为什么驱动程序需要执行网络 I/O。这至少从表面上看似乎表明存在设计问题。

【讨论】:

  • 我会接受这一点,因为是的,对 TDI 的简要了解揭示了巨大的复杂性。我实现了一个用户模式服务,该服务具有等待驱动程序通知的 IRP,并将数据从驱动程序向上传递到套接字,从套接字向下传递到驱动程序。为了减少所需的上下文切换次数,我对数据进行了分块,例如,我会在将套接字发送给驱动程序之前获取套接字上的所有可用数据。最后,我需要一个驱动程序来进行网络 I/O 的原因是它是一个虚拟串行端口。
【解决方案2】:

使用TDI接口,XP和Vista都可以使用。

http://msdn.microsoft.com/en-us/library/ff565112.aspx

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-05-07
  • 2015-11-19
  • 1970-01-01
  • 2018-07-29
  • 2013-11-10
  • 2010-10-25
  • 1970-01-01
  • 2013-01-17
相关资源
最近更新 更多