VS2015驅動環境配置


准備

vs2015社區中文版

鏈接:https://pan.baidu.com/s/1gucO9NcymG1x8RRQetaNIw

提取碼:a4zj

 

WDK10.0.26639

鏈接:https://pan.baidu.com/s/140qjNUfo8TCNDqlmWmjuQw

提取碼:sng8

 

 

正文

安裝位置默認,選擇自定義安裝

選擇功能這里只勾3個部分:vs2015更新3,編程語言的Visual C++,通用windows應用開發工具的windows 10 SDK10.0.10240。

最后確認安裝,這里安裝的時間會相對較長,安裝完成后就可以確定並啟動了

 

安裝完vs2015后再安裝wdk10,運行安裝包后默認安裝C盤,這里直接next就行

 

隱私聲明這里,直接選擇yes和next就行

 

許可協議這里選擇Accept就行

 

最后就是等待Windows Driver Kit的安裝

 

安裝結束后close就行,learn more about復選框里勾或不勾都沒啥影響

 

重新打開vs2015,選擇新建一個項目,這個時候就可以在Visual C++下看到Windows Driver這個選項

 

打開Windows Driver->WDF選擇里面的Empty(KMDF),名稱和位置根據習慣修改

 

項目建好后首先添加一個新建項,我習慣是用C寫驅動代碼,所以新建文件后綴為.C,如果習慣用C++寫則文件后綴為.CPP

 

最后就是修改項目屬性,打開調試->項目屬性

 

由於我編譯為debug版本,所以這里要確認配置的是debug的屬性,如果是release則在配置這里選擇為release后再修改屬性

 

打開C/C++的常規設置,把警告等級改成警告等級3,其他不同的設置按照圖中進行修改即可

 

打開Driver Settings,這里的Target OS Version和Target Platform按照圖中設置就行,如果驅動在win10下運行就把Target OS Version改為windows10

 

Inf2Cat是用於簽名的,我們這里暫時不用管這個,在run inf2cat中選擇否就行

 

最后打開Driver Signing,這個也是驅動簽名的,這里在Sign Mode里選擇off就行。到此就完成了所有環境的配置,接下來就可以開始編寫程序了

 

用一段測試代碼編譯一下,成功后如圖,測試代碼在下面

 

測試代碼作用是打印打印ssdt函數地址,這個不用管,主要是加載驅動后會在

DebugView中看到我們的相關信息,到虛擬機中加載,在DebugView中查看結果如圖

 

測試代碼

 1 #include <ntddk.h>
 2 
 3 /*導出ssdt結構體*/
 4 typedef struct _ServiceDescriptorTable 
 5 {
 6   PVOID ServiceTableBase;                    //System Service Dispatch Table 的基地址  
 7   PVOID ServiceCounterTable;                //包含着 SSDT 中每個服務被調用次數的計數器。這個計數器一般由sysenter 更新。 
 8   unsigned int NumberOfServices;        //由 ServiceTableBase 描述的服務的數目。  
 9   PVOID ParamTableBase;                        //包含每個系統服務參數字節數表的基地址-系統服務參數表 
10 } *PServiceDescriptorTable;
11 extern PServiceDescriptorTable KeServiceDescriptorTable;
12 
13 VOID DriverUnload(PDRIVER_OBJECT pDriverObject) 
14 {
15   KdPrint(("驅動卸載成功!\n"));
16 }
17 
18 NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING reg_path) 
19 {
20   ULONG ssdtindex,ntaddress;
21   ULONG *ssdtbase;
22   KdPrint(("驅動成功加載!\n"));
23   
24   ssdtbase = KeServiceDescriptorTable->ServiceTableBase;
25   for (ssdtindex = 0; ssdtindex < (ULONG)KeServiceDescriptorTable->NumberOfServices; ssdtindex++)
26   {
27     ntaddress = *ssdtbase;
28     KdPrint(("%0x\n", ntaddress));
29     ssdtbase += 1;
30   }
31 
32   
33   pDriverObject->DriverUnload = DriverUnload;
34   return STATUS_SUCCESS;
35 }

 

 

 

參考

https://www.mycode.net.cn/language/cpp/1771.html

 


免責聲明!

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



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