使用 VS2019和WDK10 編譯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共存,不需要卸載舊版本。(注意:離線安裝需先導入證書)
    啓動VS安裝
    正在安裝Installer
  2. 選擇組件,勾選使用C++的桌面開發
    選擇開發環境
  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)
選擇SDK
選擇單個組件
  1. 其他組件根據自己的需要來選,然後點安裝。
    VS提示重啓
  2. 如果提示重啓系統,就重啓。如果沒有提示重啓,那麼經過短暫的等待就可以看到VS2019的啓動界面了,安裝成功!
    VS安裝完畢
  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。
    兩個選項:第一項是在線安裝,第二項是下載後再安裝,建議選第二項以防安裝不成功又要重新在線安裝。
    開始安裝WDK10
    WDK10安裝完畢
  2. 安裝的中間過程就跳過不說了,結束時會出現安裝Windows Driver Kit Visual Studio插件的提示,點擊Close開始安裝插件。
    開始安裝插件
  3. 離線安裝時會提示數字簽名無效,不用管,繼續。
    數字簽名無效
  4. 如果提示要等待進程結束,有耐心就多等一會,可能前面的安裝任務還在收尾,沒耐心就直接點End Tasks。
    EndTasks
  5. 完成VS插件安裝。
    插件安裝完畢
  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目錄,注意它們的路徑都不要有中文或者空格。
    tap-windows目錄

  2. 打開devcon文件夾,應能直接看到文件,而不是嵌套着另一個devcon文件夾,路徑不對的自行調整。
    devcon目錄

  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:version.m4文件內容
    這個是Tap-Windows的相關屬性,可以自行修改,其中PRODUCT_TAP_WIN_COMPONENT_ID要確保與OpenVP的一致,默認是tap0901,改完以後記得保存。

  5. 下面就開始編譯了,從開始菜單找到Developer Command Prompt for VS 2019,打開。
    找到VS Command
    啓動VS Command

  6. 定位到buildtap.py所在目錄,輸入下面的命令,然後回車。

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

開始編譯
然後就可以看到花花綠綠的輸出了。
各種警告
黃的是警告,大多是強制類型轉換引起的,沒什麼影響,其中還有兩段紅色的,是因爲我用不到Arm64構架,沒有裝Arm64的庫(有需要的可以自行安裝),所以報錯,但是x86和x64構架的驅動程序已經成功生成。報錯IOError
最後的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
  • 1

NSIS打包結果
出現上面的結果就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
  • 1

更新命令:

tapinstall update OemVista.inf tap0901
  • 1

刪除命令:

tapinstall remove tap0901
  • 1

後續更新中增加了個全部刪除命令

tapinstall removeall
  • 1

當然,使用時還要記得把OemVista.inf和tap0901替換爲自己設置的名稱。
驅動安裝成功後會出現一個名爲TAP-Windows Adapter V9的虛擬網卡(如果更改過相關屬性,則會顯示對應的名稱)。
虛擬網卡

  1. 可以用openvp.exe檢測功能是否正常,命令
openvp     n --show-adapters
  • 1

能顯示網絡連接名稱和GUID就說明openvp與虛擬網卡相互匹配且工作正常,否則可能是二者的PRODUCT_TAP_WIN_COMPONENT_ID不匹配,或者其中之一不正常。(本項目未包含openvp.exe)
ShowAdapters

其他已知的問題

使用Python 3.7會報錯,不知道是不是因爲字符串的處理方式和2.7不一樣造成的。

                                </div>
            <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-60ecaf1f42.css" rel="stylesheet">
                            </div>
</article>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章