VS2013+WDK8.1+VirtualBox NDIS Filter驱动开发环境配置

一. 主机OS为Win8.1 x64,在此OS上安装VS2013 With Update5和WDK8.1

二.在虚拟机中装好64位的Win8.1系统。并在VirtualBox中配置一下网络,把网络连接方式改为“桥接网卡”,“界面名称”选择你的真机上能上网的那块网卡。
为什么要用“桥接网卡”方式来让虚拟机中的系统联网,而不用默认的“网络地址转换(NAT)”?因为如果使用“网络地址转换(NAT)”的话,对于虚拟机来说,你的真机相当于路由器,虚拟机相当于你的子局域网下的一台机器。也就是说你的真机和虚拟机并不在一个局域网中,你们在“网上邻居”中看不到彼此,那样的话你通过计算机名无法访问到虚拟机,那样搞起来会比较麻烦。所以使用“桥接网卡”方式。VMware中也有类似的设置。如果测试机器也是真机的话,只要开发机器和测试机器都连到同一个路由器上就没有问题了。


然后配置一下串口,如下图所示,启用串口,端口编号COM1,端口模式“主机管道”,路径/地址(即管道名字)设为“\\.\pipe\com_1”。


端口模式里面的其它模式是什么意思呢?简单来说:
“未连接”:效果就是对虚拟机来说,它的电脑主板上有串口,但是什么都没插。
“主机管道”:就是把虚拟机的串口映射到宿主机(我们的真机)的命名管道上,命名管道是Windows系统提供的一种进程间通信的方式,用过命名管道的程序员一定对上面这个“\\.\pipe\”很熟悉。
“主机设备”:就是把虚拟机的串口映射到宿主机的真实串口上,这时,我们真机的主板上的串口就不属于我们了,变成了虚拟机的私有财产去了,当我们在真机的窗口上插个设备上去后,实际上是插到了虚拟机里。
“裸文件”:貌似是把虚拟机的串口映射到一个宿主机中的一个文件句柄上?然后用ReadFile和WriteFile读写?没用过
“TCP”:把虚拟机的串口映射到宿主机的socket套接字上
当然这里只是科普一下,实际操作选“主机管道”并输入“\\.\pipe\com_1”就行了,其中的“com_1”是管道名,自己取的,你可以自己取一个不一样的。

三.进入虚拟机中的系统,首先关闭UAC,然后启用系统的Administrator用户账户并设置密码。因为待会儿要在VS中输入虚拟机的计算机名、用户名、密码进行连接,完成后重启一下虚拟机。

四.在开发机的WDK安装目录下找到“WDK Test Target Setup”安装包,安装WDK8.1的时候如果是安装到默认路径,那么应该在“C:\Program Files (x86)\Windows Kits\8.1\Remote”文件夹下,有ARM、X64、X86版,由于我的测试机是64位系统,故选择X64文件夹下的“WDK Test Target Setup x86-x86_en-us.msi”,把这个安装包拷出来拿到虚拟机里进行安装。WDK10的路径可能有所不同,但只要在WDK安装目录下搜索“Remote”或“WDK Test Target”就能找到。

五.在开发机器上打开VisualStudio,点击"DRIVER"-"Test"-"Configure Computers",如果VS没有"DRIVER"这个菜单项,说明WDK没有装好。

在弹出的"Computer Configuration"对话框中点击"Add New Computer",然后在"Computer name"中输入虚拟机的计算机名,下面的选项第一项“Provison computer and automatically configure debugers”是全自动,方便是方便,不过它不会自动设置调试串口。所以选择第二项“Provision computer and choose debuger settings”。

点击下一步,照着下图进行设置,连接方式"串口",波特率默认115200,勾选管道,勾选自动重连,管道名"\\.\pipe\com_1",然后点击下一步。最好关闭两个系统的防火墙。


如果连接成功的话会要求你输入虚拟机Administrator的用户名和密码。如果出现连接失败,请检查你的真机和虚拟机能否相互ping同,你在网络邻居(网络)中能否看到彼此的计算机名。

五.安装虚拟机系统对应的符号表,并在VS的工程中设置:或配置环境变量:在系统的环境变量中新建一个_NT_SYMBOL_PATH系统变量,值为C:\symbols;


六.打开VS2013,建立新工程,即可看到新的驱动工程项目。新建一个Networking的NDIS工程。VS为我们生成的解决方案中有两个项目,其中Driver用于生成驱动程序文件,Package用于部署安装测试驱动。打开KMDF Driver Package项目的属性对话框,找到"配置属性"-"Driver Install"-"Deployment",在此选项卡上,勾选"Enable deployment","Target Computer Name"就选择刚才配置好的虚拟机的机器名。"Driver Installation Options"选择"Hardware ID Driver Update",然后输入ID,ID输什么呢,可以在KMDF Driver项目中的inf文件里找,inf文件里的[Standard.NT]节中有ID,照着填入即可,然后点确定。

* KDPrint没有输出的解决办法:

在虚拟机的OS中创建   

[HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Debug Print Filter]

DEFAULT=dword:0000000f

重启虚拟机,重启后需要重新配置连接下。

* Debug NDISlwf driver

1. 将Build出来的.cat, .sys, .inf文件拷贝到虚拟机中。

2. 在虚拟机中安装驱动,步骤如下,

(1) 打开“网络和共享中心”。
(2) 右击“本地连接”或“无线网络”,选择“属性”。
(3) 在弹出的“本地连接 属性”对话框中选中“常规”属性页,点击“安装”按钮。
(4) 在弹出的“选择网络组件类型”对话框中选中“服务”,然后点击“添加”按钮。
(5) 在弹出的“选择网络服务”对话框中点击“从磁盘安装”按钮。
(6) 在弹出的“从磁盘安装”对话框中点击“浏览...”按钮。“netsf.inf”文件,点击“打开”按钮,确定。
(7) 在弹出的“选择网络服务”对话框中选中“Passthru”,点击“确定”按钮。
(8) 在安装过程中对弹出的数字签名对话框都要点击“确认”按钮。
(9) 安装完成后,“Passthru”就出现在了组件列表中

3.在VS中启动Debug,并设置断点。

4.在虚拟机中管理员权限下的CMD中输入net strart nidslwf,如果没有进入断点,先stop一下,再start,这样应该就能进入断点了。


使用VS2015+WDK10+WKD10可能遇到的问题

An SDK corresponding toWDK version '8.1' was notfound
这是因为没有安装  windows 10 sdk 导致的,安装完后即可。



Project properties
Debugging
Remote Computer Name, drop down and select Configure...







Filter Drivers主要包括以下特性:   1) 一个Filter Drivers实例叫Filter Module。Filter Module附加在一个适配器的微端口驱动上, 来自相同或不同Filter Drivers的多个Filter Module都可以被堆叠在一个网络适配器上   2) 在Filter Module被安装驱动栈时,之上的协议驱动和之下的微端口驱动都不需要提供额外的支持功能   3) 因为Filter Module不像中间层驱动(intermediate driver)那样提供一个虚拟的微口,也不与某个设备对象联结,所以在微端口适配器(miniport adapter)之上的Filter Module 功能相当于一个修过过版本的微端口适配器(miniport adapter)。(原文:Because filter drivers do not implement virtual miniports like an intermediate driver, filter drivers are not associated with a device object. A miniport adapter with overlying filter modules functions as a modified version of the miniport adapter.)   4) NDIS使用配置信息来到决定一个Filter Module附加到一个网络适配器栈上的顺序   5) 在不用拆除整驱动栈的情况下,NDIS可以动态的插入、删除Filter Module或进行重新配置   6) 当NDIS重起驱动栈的时候协议驱动可以获得在栈上的Filter Module列表   7) Filter Drivers可以过滤下层网络适配器上绝大部分的通信。Filter Module不联结某特定的绑定(Filter modules are not associated with any particular binding between overlying protocol drivers and the miniport adapter.)   8) Filter Drivers 可以选择为过滤服务也可以选择为分流的不过滤服务,选择为哪一种是可以动态配置的(Filter drivers can select the services that are filtered and can be bypassed for the services that are not filtered. The selection of the services that are bypassed and the services that are filtered can be reconfigured dynamically.)   9) NDIS 保证有效的上下文空间,也不就是说Filter Drivers不要需要通代码COPY缓冲区来获得上下文空间  
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值