咱們開始編寫第一個驅動程序,首先咱們須要進行項目的建立,在之前的隨筆中,咱們已經學會了如何去創建雙機調試環境。html
咱們打開VS2017,創建如圖所示的項目,取名爲:MyFirstDriver.點擊肯定函數
因爲,我寫這個都是寫.C的文件,所以我嘗試使用.CPP文件,實現一下第一個FirstDriver.工具
創建一個.cpp文件。spa
而後輸入咱們的代碼調試
#ifdef __cplusplus extern "C" { void DriverUnload(PDRIVER_OBJECT); NTSTATUS DriverEntry(PDRIVER_OBJECT, PUNICODE_STRING); } #else void DriverUnload(PDRIVER_OBJECT); NTSTATUS DriverEntry(PDRIVER_OBJECT, PUNICODE_STRING); #endif
解釋一下__cplusplus這個宏,咱們能夠經過這個宏定義判斷咱們的文件是.CPP仍是.C後綴的文件,code
另外,咱們都知道C++中有函數重載的機制,可是在驅動中通常都是C語言編寫,咱們要避免名稱粉碎機制,htm
就要使用extern"C"。blog
而後就是DriverEntry 這個函數,這是兩個參數就是固定的參數,規定是這樣寫的,記住就好了,虛擬機
另外就是DriverUnload 這個函數,這個參數就是固定的參數,是驅動的卸載函數,記住就好了,編譯
而後咱們來看一下這個兩個函數的實現,在編譯一下這個項目
完整代碼以下:
1 #include<ntifs.h> 2 3 //爲了不名稱粉碎機制 4 5 #ifdef __cplusplus 6 7 extern "C" 8 { 9 void DriverUnload(PDRIVER_OBJECT); 10 NTSTATUS DriverEntry(PDRIVER_OBJECT, PUNICODE_STRING); 11 12 } 13 #else 14 void DriverUnload(PDRIVER_OBJECT); 15 NTSTATUS DriverEntry(PDRIVER_OBJECT, PUNICODE_STRING); 16 #endif 17 18 void DriverUnload(PDRIVER_OBJECT pDriver) 19 { 20 UNREFERENCED_PARAMETER(pDriver); 21 return; 22 } 23 NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver_object, PUNICODE_STRING pPath) 24 { 25 DbgPrint("Hello Drv!\n"); 26 pDriver_object->DriverUnload = DriverUnload; 27 return STATUS_SUCCESS; 28 }
編譯以上代碼,咱們可能會遇到
error C2220: 警告被視爲錯誤 - 沒有生成「object」文件
warning C4100: 「pPath」: 未引用的形參
這樣的報錯,咱們要如何解決這個問題呢?
UNREFERENCED_PARAMETER(pPath);
這樣就能夠解決這個問題了,也能夠經過VS項目的設置來下降對VS項目的警告等級解決這個問題,
咱們還須要進行項目的一些其餘的設置。
而後編譯生成將咱們生成的驅動文件,放到咱們的虛擬機中,並使用驅動加載工具進行加載。
至此咱們的第一個驅動程序就完成了
原文出處:https://www.cnblogs.com/wenlong-4613615/p/10724924.html