从零开始用VS2019+WDK10搭建环境编译Tap-Windows6(9.23.3.601)(NDIS6)

编译Tap-Windows6

  • 写在前面
    • 非常重要:需要64位操作系统才能完成编译!
  • 环境搭建
    • 前期准备
    • 安装VS1029
    • 安装WDK 10
  • 编译Tap-Windows6
  • 其他已知的问题

写在前面

转载请注明作者和出处。

本文的目的不是介绍Tap-Windows6的使用(也不会介绍),而是讲解如何编译,需要使用Tap-Windows6而不关心如何编译的可以去下载现成的安装包安装使用。

网络上关于Tap-Windows6编译的教程很少,正好工作需要研究了一下如何编译它,于是就整理了一下,写篇教程给需要的人参考,少走点弯路。
需要说明一点,Tap-Windows6和Tap-Windows是有差别的!Tap-Windows6支持Win7以上操作系统,Tap-Windows虽然也支持Win7,但是已经好几年没更新了,已经淘汰了。
截止2019年7月Tap-Windows6最新版是9.23.3.601。
好了,话不多说,直接进入正题。

非常重要:需要64位操作系统才能完成编译!

环境搭建

前期准备

下载VS2019: Visual Studio 2019.
下载WDK10: 适用于 Windows 10 版本 1903 的 WDK(10.0.18362.1).

安装VS1029

  1. 安装VS2019,社区版、专业版、企业版都可以,截止2019年7月最新版是16.1.5,可以和旧版VS共存,不需要卸载旧版本。(注意:离线安装需先导入证书)
    从零开始用VS2019+WDK10搭建环境编译Tap-Windows6(9.23.3.601)(NDIS6)_第1张图片
    从零开始用VS2019+WDK10搭建环境编译Tap-Windows6(9.23.3.601)(NDIS6)_第2张图片
  2. 选择组件,勾选使用C++的桌面开发
    从零开始用VS2019+WDK10搭建环境编译Tap-Windows6(9.23.3.601)(NDIS6)_第3张图片
  3. 切换到单个组件,勾选以下组件:
单个组件
Windows 10 SDK(10.0.18362.0)(后面会解释为啥要选它)
MSVC v142 - VS 2019 C++ x64/x86 Spectre缓解库(v14.21)
Python 2 64-bit(2.7.16)
从零开始用VS2019+WDK10搭建环境编译Tap-Windows6(9.23.3.601)(NDIS6)_第4张图片
从零开始用VS2019+WDK10搭建环境编译Tap-Windows6(9.23.3.601)(NDIS6)_第5张图片
  1. 其他组件根据自己的需要来选,然后点安装。
    从零开始用VS2019+WDK10搭建环境编译Tap-Windows6(9.23.3.601)(NDIS6)_第6张图片
  2. 如果提示重启系统,就重启。如果没有提示重启,那么经过短暂的等待就可以看到VS2019的启动界面了,安装成功!
    从零开始用VS2019+WDK10搭建环境编译Tap-Windows6(9.23.3.601)(NDIS6)_第7张图片
  3. 点右上角的×关闭VS。

安装WDK 10

  1. 运行wdksetup.exe,安装Windows Driver Kit 10.0.18362.1(支持Win10 1903)。
    特别要说明的是,Windows Driver Kit的版本需要与Windows SDK的版本对应,而且Windows Driver Kit带的插件还要支持VS2019,于是我就下载了最新的18362,省得麻烦,所以安装VS2019时要勾选SDK 10.0.18362.0。
    两个选项:第一项是在线安装,第二项是下载后再安装,建议选第二项以防安装不成功又要重新在线安装。
    从零开始用VS2019+WDK10搭建环境编译Tap-Windows6(9.23.3.601)(NDIS6)_第8张图片
    从零开始用VS2019+WDK10搭建环境编译Tap-Windows6(9.23.3.601)(NDIS6)_第9张图片
  2. 安装的中间过程就跳过不说了,结束时会出现安装Windows Driver Kit Visual Studio插件的提示,点击Close开始安装插件。
    从零开始用VS2019+WDK10搭建环境编译Tap-Windows6(9.23.3.601)(NDIS6)_第10张图片
  3. 离线安装时会提示数字签名无效,不用管,继续。
    从零开始用VS2019+WDK10搭建环境编译Tap-Windows6(9.23.3.601)(NDIS6)_第11张图片
  4. 如果提示要等待进程结束,有耐心就多等一会,可能前面的安装任务还在收尾,没耐心就直接点End Tasks。
    从零开始用VS2019+WDK10搭建环境编译Tap-Windows6(9.23.3.601)(NDIS6)_第12张图片
  5. 完成VS插件安装。
    从零开始用VS2019+WDK10搭建环境编译Tap-Windows6(9.23.3.601)(NDIS6)_第13张图片
  6. 如果不仅仅要生成驱动程序,而且还要生成安装包,那么请安装NSIS(如果修改了NSIS安装路径,那么paths.py中NSIS的路径也要对应修改)。
    下载NSIS3.0.4安装:官网地址.

编译Tap-Windows6

环境搭好以后,就可以开始编译工作了。

  1. 下载tap-windows6-master和devcon(devcon是微软官方提供的驱动程序开发示例Windows-driver-samples里面的一个子项,用来安装、修改、删除、调整设置驱动程序的),可以用我上传的,也可以自己从GitHub下载。
我的(已包含devcon):
tap-windows6+devcon: 下载地址
GitHub:
tap-windows6: 下载地址
Windows-driver-samples: 下载地址
  1. 从Github下载的devcon要复制到tap-windows6-master目录,注意它们的路径都不要有中文或者空格。
    从零开始用VS2019+WDK10搭建环境编译Tap-Windows6(9.23.3.601)(NDIS6)_第14张图片

  2. 打开devcon文件夹,应能直接看到文件,而不是嵌套着另一个devcon文件夹,路径不对的自行调整。
    从零开始用VS2019+WDK10搭建环境编译Tap-Windows6(9.23.3.601)(NDIS6)_第15张图片

  3. 好了,现在回到tap-windows6-master目录,可以看到有两个.py文件,说明该项目是基于Python脚本来编译的,buildtap.py用来编译tap-windows6、签名并生成安装包,paths.py用来设置企业版WDK(缩写EWDK)路径和NSIS(生成安装包的编译器)路径。
    之前我被paths.py引入歧途,因为它里面设置的是企业版WDK路径,我就专门去下载了企业版WDK。好家伙,竟然有12.4GB之多,虽说它自带编译工具,但我却死活用不了,折腾来折腾去浪费了不少时间,劝大家不要去下载尝试。因为后面发现根本不需要EWDK!!!差点吐血!!!

  4. OK,淡定,下面打开version.m4:从零开始用VS2019+WDK10搭建环境编译Tap-Windows6(9.23.3.601)(NDIS6)_第16张图片
    这个是Tap-Windows的相关属性,可以自行修改,其中PRODUCT_TAP_WIN_COMPONENT_ID要确保与OpenVPN的一致,默认是tap0901,改完以后记得保存。

  5. 下面就开始编译了,从开始菜单找到Developer Command Prompt for VS 2019,打开。
    从零开始用VS2019+WDK10搭建环境编译Tap-Windows6(9.23.3.601)(NDIS6)_第17张图片
    从零开始用VS2019+WDK10搭建环境编译Tap-Windows6(9.23.3.601)(NDIS6)_第18张图片

  6. 定位到buildtap.py所在目录,输入下面的命令,然后回车。

buildtap.py --ti=devcon --sdk=WDK -b -p

从零开始用VS2019+WDK10搭建环境编译Tap-Windows6(9.23.3.601)(NDIS6)_第19张图片
然后就可以看到花花绿绿的输出了。
从零开始用VS2019+WDK10搭建环境编译Tap-Windows6(9.23.3.601)(NDIS6)_第20张图片
黄的是警告,大多是强制类型转换引起的,没什么影响,其中还有两段红色的,是因为我用不到Arm64构架,没有装Arm64的库(有需要的可以自行安装),所以报错,但是x86和x64构架的驱动程序已经成功生成。从零开始用VS2019+WDK10搭建环境编译Tap-Windows6(9.23.3.601)(NDIS6)_第21张图片
最后的IOError是因为没有生成Arm64构架的程序,复制到dist目录的时候找不到这个文件。
正因为如此,buildtap.py没有生成安装包。

  1. 如果想要生成安装包,而又不想安装Arm64的库的话,就在dist文件夹里把i386或者amd64文件夹里的内容复制到arm64文件夹(注意:这样做是不能在arm64构架的CPU上使用的,有需要的还得老老实实安装Arm64的库再编译),然后再回到Developer Command Prompt for VS 2019,输入下面的命令,回车:
buildtap.py --ti=devcon -p

从零开始用VS2019+WDK10搭建环境编译Tap-Windows6(9.23.3.601)(NDIS6)_第22张图片
出现上面的结果就OK了,返回tap-windows6-master文件夹就能看到安装包了。
生成的安装包
对于Tap-Windows6的编译介绍到这里就结束了,至于想要正常安装使用的话还需要给编译的驱动程序签名。不过这又是另外一个话题了,不在本文讨论范围。否则在Win8/Win10上就只能通过禁用驱动程序强制签名来运行,或者自己做一个CA证书来签名(需要把这个CA加到受信任的根证书里)。但是就这样交付给客户使用的话很不友好,所以最好还是弄一个正规的签名。有兴趣的可以自己研究一下,编译的时候带上–sign可以进行开发者签名,不过我没成功,sign文件夹里还有一些签名用的工具,我还没研究过。目录里的Tap6.tar.gz可用来提交给微软进行兼容性认证。

  1. 最后简单介绍一下tapinstall.exe(devcon.exe)的用法(命令行),不使用安装包安装的可以看一下:

安装命令:

tapinstall install OemVista.inf tap0901

更新命令:

tapinstall update OemVista.inf tap0901

删除命令:

tapinstall remove tap0901

后续更新中增加了个全部删除命令

tapinstall removeall

当然,使用时还要记得把OemVista.inf和tap0901替换为自己设置的名称。
驱动安装成功后会出现一个名为TAP-Windows Adapter V9的虚拟网卡(如果更改过相关属性,则会显示对应的名称)。
虚拟网卡

  1. 可以用open.exe检测功能是否正常,命令
open --show-adapters

能显示网络连接名称和GUID就说明open与虚拟网卡相互匹配且工作正常,否则可能是二者的PRODUCT_TAP_WIN_COMPONENT_ID不匹配,或者其中之一不正常。(本项目未包含open.exe)
ShowAdapters

其他已知的问题

使用Python 3.7会报错,不知道是不是因为字符串的处理方式和2.7不一样造成的。

你可能感兴趣的:(编程教程)