-->

过剩和微型端口驱动程序(NDIS and miniport driver)

2019-09-18 17:31发布

我想修改使用的Visual Studio 2012提供的WDK工具以太网驱动程序。

在WDK提供的样品是“微型端口适配器”和他人之间“NDIS轻型筛选器”。 我仍然在驱动程序编写的开始,因此发现很难通过代码导航。

我能够在的Visual Studio 2012构建它后安装微型端口适配器[我的网络适配器列表,“微软虚拟微型端口适配器”出现了。]我能够也应当为其分配一个IP地址和子网掩码。[我发现这并不能连接到任何物理设备在我的电脑上。

我还设置了“调试视图”软件从我的适配器检查驱动程序的消息。[我用“DbgPrint”的代码语句,然后建造它。]但是,调试消息被重复打印。

1为什么消息连连印刷? 消息是从所述程序的“datapath.c”文件,距离函数“MPSendNetBufferLists”。 [发送或在网络上接收到的“净缓冲器”指定的数据。]

2 - 我设置Wireshark来获取适配器上的数据,并将其显示有从ARP,HTTP,SSDP,MDNS等走出它的请求。 我无法理解什么是真正谈话的适配器? 而如何从谈话停止吗?

我可以用“平”,看是否有对我已经分配给适配器的IP地址的连接,并将它与一个成功的告诉所有的数据包被送往,也没有丢包响应。

我的目标是通过IP地址来发送和接收“数据”包到这个以太网适配器。 即 - 我想要一个应用程序连接到分配给适配器的IP地址和它对话。

3-可我居然在WDK所提供的样品做呢?

任何其他建议或意见,欢迎。

PS-我无法使用内置到Visual Studio 2012年我用了2个人电脑和能够连接并安装驱动程序到“目标”的电脑,但无法做到断点等的代码和任何Windows调试计划只是“目标”在PC上安装驱动程序后,什么也没做。 在这个有什么建议? 我想我可以做到一步一步的司机也调试[我知道我错了。

由于阿迪亚

Answer 1:

NDIS微型端口驱动程序,像许多低级别的驱动程序,是为了跟硬件。 微型端口的责任是采取从OS发送数据包,将它们转换成任何格式由硬件要求,并指示硬件发送数据包在电线上。

WDK的可能(事实上,习惯了)包括现实世界的硬件将数据包发送一个真实世界的例子驱动程序。 但是,这导致了一些混乱,因为现实世界的司机必须处理大量的来自样品的主要点分散特定硬件的详细信息。 如果从真实世界的驱动开始,你必须做的第一件事是确定的所有具体的硬件位和RIP的出来,所以你可以用自己的特定硬件位替换它们。

相反,在WDK的“netvmini”样品是假的驱动程序。 这意味着它伪装成有实际的硬件,但暗地里它是一个谎言。 当操作系统将数据包发送到netvmini,该netvmini驱动程序将简单地广播那些包安装在该计算机上的任何其他netvmini微型端口适配器。 (实际上,在同一台机器上安装2个netvmini适配器模拟,如果你有两个真正的适配器插在同一个以太网集线器会发生什么。)所以ASCII艺术中,这是如果你在同一系统上安装两个netvmini适配器会发生什么:

       TCPIP                       TCPIP                      TCPIP
         |                           |                          |
Real physical miniport        Your netvmini #1           Your netvmini #2
         |                           \                          /
   [The Internet]                     [The netvmini virtual hub]

作为希望的ASCII艺术说明,你netvmini适配器没有到Internet的任何路径。 所以,你的驱动程序不会得到可以上网路线,直到你在你的硬件的详细信息,添加一个“真实”的IP地址。 在此之前,Windows将只保留试图发送的ARP及永远不会去任何地方的HTTP请求。

为了回答您的具体问题:

  1. 从MPSendNetBufferLists消息被印刷每次OS尝试发送一个数据包的时间。 因为OS认为你有一个真正的网络连接,操作系统将进行几次尝试使用它。 最后,应该安静下来一点,当一切都得出结论,这是不是一个有用的链接。

  2. 该请求从TCPIP到来。 如果你不想TCPIP发送数据,然后从适配器解除绑定。

  3. 你绝对可以将数据发送到适配器。 事实上,你已经发现,你已经随机发送的HTTP数据包等,但数据不会实际访问Internet,直到你教司机如何跟你的实际硬件。

如果你坐在那里思考“但我没有硬件!”,那么你可能想创建某种形式的虚拟微型端口。 虚拟微型端口都是这样的,因为它们没有真正的硬件netvmini,但他们仍然有一些办法让关闭机器的数据包。 例如,在第2层(如L2TP)操作VPN微端口将通常安装的第二驱动器 - 的NDIS协议驱动程序 - 发送和从“真正的”物理微型端口接收数据。 那么虚拟微型端口谈判其协议时,它需要得到的数据包关闭机器。 其结果是:

        TCPIP
          |
  Your virtual miniport
          |
   Your NDIS protocol
          |
The real physical miniport
          |
     The Internet

有替代架构; 例如,VPN,在第4层(如SSTP)操作可能决定打开,而不是实现的NDIS协议驱动器的插座WSK:

        TCPIP
          |
  Your virtual miniport
          |
      WSK socket
          |
        TCPIP
          |
The real physical miniport
          |
     The Internet


文章来源: NDIS and miniport driver