win7(X64)+wdk7驅動環境搭建


 

!!版權聲明:本文為博主原創文章,版權歸原文作者和博客園共有,謝絕任何形式的 轉載!!

作者:mohist

 

 

-----  藍 屏 警 告 --- 

  加載驅動的操作請在虛擬機中完成, 可以有效避免物理機藍屏 或者其他情況出現 帶來的損失。

 

1、准備

       wdk7下載地址:    https://www.microsoft.com/en-us/download/details.aspx?id=11800

    vmware12: (我選擇vmware12是因為 其對win7的支持,有些版本對操作系統的是有要求的) 

       win7:   https://msdn.itellyou.cn/        打開后,選擇左側的操作系統,找到合適你的需求版本下載(下載推薦選擇  迅雷,下載鏈接是  edk2 哦)

       DriverMonitor:  (Google一下,自行下載)。 主要用來加載和卸載驅動。

       DebugView:      https://docs.microsoft.com/zh-cn/sysinternals/downloads/debugview   (查看內核輸出)

       64signer: 驅動簽名工具。  Google一下, 自行下載

2、環境搭建

     A、安裝 vmware12 , 再 創建 win7 X64的虛擬機。 (不會? 那就 Google一下) 

     B、安裝win7 操作系統, 並激活。 

     C、安裝 vmware install tool (  不會? 那就 Google 一下)

3、安裝 wdk

     下載wdk后,使用 band  或者其他的解壓縮工具 解壓, 安裝即可。(傻瓜式安裝 , 下一步,下一步。。。。。) 

    安裝結束后: 安裝目錄大概是這樣的,

 

4、編寫一個自己的第一個驅動程序

       特別說明, 我使用的是X64    編譯。

        我再C盤根目錄創建了一個文件夾,名為demo, 里面准備了下面的3個文件.

        A、文件名: helloworld.c   , 文件內容如下:

#include <ntddk.h>

// unload my driver
VOID DriverUnload(PDRIVER_OBJECT pDriverObject) 
{
    DbgPrint(" the driver unloaded successfully! \n");
}

// the entry of driver
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING reg_path) 
{
    DbgPrint("ok, congratulation ,the driver has loaded successfully!\n");
    
    if(NULL != pDriverObject)
        pDriverObject->DriverUnload = DriverUnload;
        
    return STATUS_SUCCESS;
}

     B、准備文件: makefile . 內容如下:

# 此文件 一般情況下只有一行 並且不需要修改 不能有前導空格 
!INCLUDE $(NTMAKEENV)\makefile.def

    C、准備文件: SOURCES, 內容如下:

#下邊這行指定生成驅動名字HelloWorld.sys
TARGETNAME=HelloWorld
#下邊這行指定生成文件的類型DRIVER指驅動
TARGETTYPE=DRIVER
#下邊這行指定生成驅動所在的路徑\SYS\HelloWorld.sys
TARGETPATH=SYS
#下邊這行指定相關頭文件所在目錄路徑
INCLUDES=$(BASEDIR)\inc;\
      $(BASEDIR)\inc\wxp;\ 

##上邊必空一行H:\WINDDK3790(DDK目錄) 等價$(BASEDIR)
#下邊這行指定驅動源代碼*.cpp或者*.c
SOURCES=HelloWorld.c\

 ---- 上面的文件准備完畢后,大概是這樣的--------

 

5、 編譯

    依次 點擊 : 開始  ->  所有程序  ->   windows driver kits -> WDK 7600.16385.1 ->    Build Environments  -> Windows 7 ->   x64 Free Build Environment   

    A、 鍵入命令,使終端來到 上面 4 的所在文件夾: C:\demo

    B、執行 構建命令: 鍵入  build  , 回車執行構建。 

 

   構建結束后,demo目錄下會大概是這樣的:

   6、執行文件 簽名。

         盡管我開啟了 win7測試模式 (管理員控制台執行命令:bcdedit /set testsigning on,  再重啟 ),沒有簽名的驅動是無法運行的。

        A、找到 5 中生成的驅動文件: helloworld.sys。  

 

      B、使用 debugview工具查看內核輸出 (請勾選: 菜單-> capture  ->  capture kernel 選項), 使用 DriverMonitor 加載驅動。

      先來一張沒有簽名驅動的截圖,發現驅動無法加載, 內核自然也沒有輸出。

  同時查看驅動文件的屬性,也無法找到關於簽名的信息:

       C、簽名驅動

         使用軟件  64Signer   對驅動文件進行簽名。    簽名后,就會發現 驅動文件的屬性頁中出現了 關於簽名的tab頁。

 

7、驅動加載與卸載

     驅動簽名后,使用 driver monitor 和 debugview工具查看驅動內核輸出。得到如下結果:

 

 

  ---------- 完結---------

附:

注意文件編碼:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM