Windows 7 驅動開發

來源:互聯網
上載者:User

標籤:

 

本文是對Win7(64)+VS2010+WDK7.1.0(WinDDK\7600.16385.1)開發驅動的小結。 

 

一、系統工具

 

1、Win7(amd64位)系統

註:已裝系統後,管理員身份運行cmd命令,查看bcdedit /set testsigning true、bcdedit  /debug on 等命令是否運行成功。若失敗,請將bcdedit命令所在檔案夾boot對應的盤(一般C盤)設定為活動狀態;若依然失敗,請修複C盤下的Boot(系統引導檔案所在),或重裝系統。

 

2、VS2010

 

3、WDK7.1.0(WinDDK\7600.16385.1)

地址:https://msdn.microsoft.com/en-us/windows/hardware/hh852365 該地址還串連 Windbg 調試工具 和Windows Symbols ,可以下載下來備後續調試時用。

 

4、WinDbg

地址:http://www.microsoft.com/whdc/devtools/debugging/default.mspx

Symbols:

地址:https://msdn.microsoft.com/en-us/windows/hardware/gg463028.aspx

註:Symbol檔案是從微軟的網站上http://msdl.microsoft.com/download/symbols下載而來,這個網址是不可以用IE直接開啟的,WinDbg->File->Symbol File Path介面中輸入SRV*C:\WINDOWS\Symbols*http://msdl.microsoft.com/download/symbols; 並選擇Reload,WinDbg會自動幫你下載,關鍵是勾選reload。

 

5、InstDrv軟體(用於安裝、啟動、停止、卸載驅動)

註:srvinstw.exe 也可以安裝、卸載sys檔案,但需要在cmd命令視窗下執行net start 驅動名、net stop 驅動名來啟動、停止服務。

 

6、64Signer-V1.2(Win7 64位 私人測試數位簽章軟體)

 

7、DbgWiew.exe (查看核心模組的輸出資訊)

地址:https://technet.microsoft.com/en-us/sysinternals/bb896647.aspx

 

8、虛擬機器(WMware10.0供雙機調試)

地址:http://www.microsoft.com/zh-CN/download/confirmation.aspx?id=8002

 

9、其他軟體: 虛擬光碟機DAEMON Tools Lite、EasyBCD(系統引導檔案修複工具)、PartitionManager(將C盤設定為使用中的磁碟分割)等

 

 

二、配置VS2010 64位開發環境

1、在VS中VisualC++下建立 空項目

 

 

添加Driver類,將標頭檔刪除,將Driver.cpp檔案修改為Driver.c檔案,內容如下:

#include "ntddk.h"

 

// 提供一個Unload函數只是為了

VOID DriverUnload1(PDRIVER_OBJECT driver)

{

// 但是實際上我們什麼都不做,只列印一句話:

DbgPrint("MyDriver: Our driver is unloading…\r\n");

}

 

NTSTATUS

DriverEntry(PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath)

{

DbgPrint("MyDriver: Hello, my salary!");

DriverObject->DriverUnload = DriverUnload1;

return STATUS_UNSUCCESSFUL;

}

 

註:添加類後,在屬性中顯示出C/C++項,供配置屬性。

 

2、點擊VS中的解決方案配置的下按鈕(即debug所處的下拉框按鈕),點擊組態管理員,點擊活動方案配置,點擊建立,輸入DriverDebug64、預設空,解決方案平台:選X64。

建成後的效果

 

3、點擊VS中視圖->其他視窗->屬性管理員

 

 

4、右擊屬性管理員中的DriverDebug64,選擇屬性,在彈出的表單中進行必要的設定。

(此處的設定都是必須的, 對複雜些的驅動開發也許還要額外另加設定)

 

註:WDK7.1.0預設安裝在C:\WinDDK\7600.16385.1檔案夾下

 

 

1)常規

目標檔案副檔名:.sys

2)VC++目錄

可執行檔目錄(編譯器路徑):C:\WinDDK\7600.16385.1\bin\amd64

註:Xp系統64位如下:

----------C:\WinDDK\7600.16385.1\bin\x86\amd64

       ----------C:\WinDDK\7600.16385.1\bin\x86

包含目錄:C:\WinDDK\7600.16385.1\inc\api

C:\WinDDK\7600.16385.1\inc\crt

C:\WinDDK\7600.16385.1\inc\ddk

庫目錄:C:\WinDDK\7600.16385.1\lib\win7\amd64

3)C/C++

前置處理器->前置處理器定義:

_AMD64_=1,AMD64=1,STD_CALL=1,WIN32=100,_WIN32_WINNT=0x0501,WINVER=0x0501,_DEBUG =1

進階->呼叫慣例:__stdcall (/Gz)

4)連接器

輸入->附加依賴項:ntoskrnl.lib;Hal.lib;wdm.lib;wdmsec.lib;wmilib.lib;ndis.lib;MSVCRT.LIB;LIBCMT.LIB;%(AdditionalDependencies)

輸入->忽略所有串連庫:是 (/NODEFAULTLIB)

資訊清單檔->啟用使用者賬戶控制(UAC):否 (/MANIFESTUAC:NO)

系統->子系統:控制台 (/SUBSYSTEM:CONSOLE)

系統->驅動程式:驅動程式 (/Driver)

系統->堆棧保留大小:4194304(可修改)

系統->堆棧提交大小:4096  (可修改)

進階->進入點:DriverEntry

進階->基址:0x10000 

 

註:參考C:\WinDDK\7600.16385.1檔案夾的ia64、X86等路徑,進行修改可以配置為ia64、32位系統。

 

5、編譯若通過,則配置成功,並生產.sys等檔案。

 

三、調試

 

配置調試機

 

1、將Win7設定為可調試狀態

1)以管理員身份開啟cmd命令視窗:Win + R 開啟運行輸入框,輸入cmd;或滑鼠點擊系統開始表徵圖,在輸入框中輸入cmd,右擊上方搜尋顯示出的cmd.exe,以管理員身份運行。

2)依次輸入:

bcdedit /?

Bcdedit /enum OSLOADER

Bcdedit /copy {current} /d “Windows 7 Copy”

Bcdedit /debug on

Bcdedit /bootdebug on

Bcdedit /dbgsettings

Bcdedit /timeout 7

 

2、將Win7設定為測試版

管理員身份運行cmd命令,bcdedit /set testsigning true

 

3、測試認證數位簽章

以管理員身份運行64Signer V1.2.exe,點擊瀏覽找到並雙機.sys檔案,點擊簽名。

 

4、查看核心輸出資訊

以管理員身份運行Dbgview.exe,點擊Capture菜單,勾選上Captrue kernel項。

 

5、配置WinDbg

1)設定系統字元表路徑:WinDbg->File->Symbol File Path介面中輸入

SRV*C:\WINDOWS\Symbols*http://msdl.microsoft.com/download/symbols; 並選擇

Reload,WinDbg會自動下載字元表,關鍵是勾選reload。

2)設定自己產生的.sys對應的字元(Symbol)路徑:

E:\Project\TestDriver\TestDriver\x64\DriverDebug64

3)設定自己產生.sys的原代碼路徑:E:\Project\TestDriver\TestDriver

註:自己產生的.sys檔案預設路徑:E:\Project\TestDriver\x64\DriverDebug64

 

6、安裝.sys檔案

以管理員身份運行運行InstDrv.exe,選擇.sys檔案,進行安裝、啟動等操作

 

註:請不要在本地主機,測試含有斷點的核心,否則卡機,無法進行任何操作,應該採用雙機調試(即建立個虛擬機器,本地機與虛擬機器通過管道進行通訊)。

 

配置虛擬機器

 

1、安裝虛擬機器

註:主板預設沒有開啟虛擬化技術,一般方法是開機或重啟時按F12鍵進入BIOS菜單,將虛擬化(Virtualization...

 

2、配置虛擬機器

1)開始-->WMware Work Stations-->雙擊“我的電腦”下的一個虛擬機器(Windows 7 x64)-->編輯虛擬機器設定-->移除印表機-->添加竄行連接埠

2)選中剛添加的竄行連接埠,在右側的對話方塊中,設定如下:

勾選 啟動時串連

選擇 使用命名的管道(N)

其下的兩個下拉框分別選擇:該端是伺服器、另一端是應用程式

3)本人執行和未執行該步驟都能夠調試成功。本步驟作為多餘補償,如果你未執行該步驟失敗,請將主機目錄C:\WINDOWS\Symbols下的拷貝到虛擬機器的相同位置。並且把自己產生的驅動編譯後產生的字元檔案(E:\Project\TestDriver\TestDriver\x64\DriverDebug64

目錄下)放到虛擬機器的C:\WINDOWS\Symbols目錄下。主要匹配主、客機上字元的一致性。

3、雙機調試

給原始碼添加調試時中斷語句

#if DBG

     __debugbreak(); //64位

#endif

重建sys檔案,重新執行以上步驟,然後以管理員身份開啟主機上的WinDbg軟體,再在客戶機安裝.sys檔案及開啟、關閉、卸載等操作。開啟後即進入中斷點,可以一步步進行調試。。。

註:彙編_asm int 3 中斷,在xp上 正確,在64位Win7上報錯。如果未能進入斷點進行調試,請檢查sys檔案是否在客戶機(虛擬Win7系統)安裝成功,系統字元集(Symbols)、本人字元Symbols是否下載或設定正確,管道連接埠是否正確等

 

提示:在本地主機上不以管理員身份運行軟體,也可能是管理員身份成功運行,而客戶機(虛擬機器上一般都要是以管理員身份運行軟體)

 

若進行 Win7 + WDK8.0+Windbg 進行Driver Filter開發,請將WDK7卸載,否則運行時會報大堆離奇錯誤。。。。

Windows 7 驅動開發

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.