我正在尝试使用Visual Studio 2012中提供的WDK工具修改以太网驱动程序。
WDK中提供的示例包括“微型端口适配器”和“NDIS轻量级过滤器”等。我仍然处于编写驱动程序的最开始阶段,因此发现很难在代码中导航。
在Visual Studio 2012中构建迷你端口适配器后,我能够安装它。在我的网络适配器列表中显示为“Microsoft Virtual miniport adapter”。我还可以为它分配IP地址和子网掩码。我发现它没有连接到我PC上的任何物理设备。
我还设置了“Debug View”软件来检查来自适配器的驱动程序消息。我在代码中使用了“DbgPrint”语句,然后构建了它。但是,会重复打印调试消息。
1-为什么要一遍又一遍地打印消息?消息来自程序的“datapath.c”文件,并且来自函数“MPSendNetBufferLists”。“'Net”指定在网络上发送或接收的数据。
2-我设置Wireshark来捕获适配器上的数据,它显示有来自ARP、HTTP、SSDP、MDNS等的请求。我不能理解实际上正在与适配器通信的是什么?我怎么才能让它不说话呢?
我可以使用'ping‘来查看分配给适配器的IP地址上是否存在连接,它会以成功响应,告知所有数据包都已发送,并且没有数据包丢失。
我的目标是通过IP地址向这个以太网适配器发送和接收“数据”数据包。ie-我希望应用程序连接到分配给适配器的IP地址并与其通信。
3-我真的可以用WDK中提供的样本来做吗?
欢迎任何其他建议或建议。
PS-我无法使用Visual Studio 2012内置的windows调试器。我用了两台电脑,可以将驱动程序连接并安装到“目标”电脑上,但无法处理断点等问题。在“目标”电脑上安装驱动程序后,代码和程序什么也不做。对此有什么建议吗?我以为我也可以一步一步地调试驱动程序,我知道我错了。
谢谢,阿迪亚
发布于 2012-06-30 01:42:22
NDIS微型端口驱动程序,就像许多低级驱动程序一样,旨在与硬件通信。微型端口的职责是从操作系统获取发送数据包,将其转换为硬件所需的任何格式,并指示硬件在线路上发送数据包。
WDK可以(实际上,过去常常)包含一个在真实硬件上发送数据包的真实示例驱动程序。但这会导致一些混乱,因为现实世界中的驱动程序必须处理许多特定于硬件的细节,这些细节分散了样本的主要观点。如果你从一个真实的驱动程序开始,你必须做的第一件事就是识别所有特定于硬件的部分,然后把它们去掉,这样你就可以用你自己的特定于硬件的部分来替换它们。
相反,WDK中的"netvmini“示例是一个假驱动程序。这意味着它假装有真正的硬件,但实际上这一切都是谎言。当操作系统将数据包发送到netvmini时,netvmini驱动程序将简单地将这些数据包广播到安装在该计算机上的任何其他netvmini微型端口适配器。(实际上,在同一台机器上安装两个netvmini适配器就相当于将两个真正的适配器插入到同一个以太网集线器中。)因此,在ASCII-art中,如果在同一系统上安装两个netvmini适配器,将会发生以下情况:
TCPIP TCPIP TCPIP
| | |
Real physical miniport Your netvmini #1 Your netvmini #2
| \ /
[The Internet] [The netvmini virtual hub]希望ASCII-art说明,您的netvmini适配器没有任何到Internet的路径。因此,在您添加硬件的详细信息之前,您的驱动程序不会获得可以路由到Internet的“真实”IP地址。在此之前,Windows将继续尝试发送ARP和HTTP请求,而这些请求永远不会到达任何地方。
要回答您的特定问题:
如果你坐在那里想“但是我没有硬件!”,那么你可能想要创建一个虚拟的迷你端口。虚拟迷你端口类似于netvmini,因为它们没有真正的硬件,但它们仍然有一些方法可以从机器上获取数据包。例如,在第二层运行的虚拟专用网小型端口(如L2TP)通常会安装第二个驱动程序-- NDIS协议驱动程序--从“真正的”物理小型端口发送和接收数据。然后,每当需要从机器上获取数据包时,虚拟微型端口都会与其协议对话。结果是:
TCPIP
|
Your virtual miniport
|
Your NDIS protocol
|
The real physical miniport
|
The Internet还有其他体系结构;例如,在第4层运行的VPN (如SSTP)可能决定打开WSK套接字,而不是实现NDIS协议驱动程序:
TCPIP
|
Your virtual miniport
|
WSK socket
|
TCPIP
|
The real physical miniport
|
The Internethttps://stackoverflow.com/questions/11255311
复制相似问题