標籤:font 代碼結構 void .com ifd lin ted code 建立
windows驅動程式基礎。轉載標明出處:http://blog.csdn.net/ikerpeng/article/details/38777641
windows驅動程式結構:
我想說的是windows驅動程式的結構和C++的程式結構是一樣的,在你知道這一點以後你就會認為簡單了很多。
首先在一個標頭檔中面做一些必要的預先處理。然後定義會用到的裝置擴充結構體(相當於Class);接下來就是函數的聲明。
當這一切結束以後,我們就在.cpp檔案中面實現這些函數。可是不一樣的地方要說一下:
1.這裡聲明的結構體是用來存放裝置的資訊的。
2.聲明的函數在結構體外面,為了和C相容要使用extern“c”;
3.聲明的函數一般來說分為,函數的入口(相當於main函數),裝置建立函數。裝置的卸載3個部分。
以下我們來看一下作者書裡面的範例:(備忘,最後幾行是我iker對比作者的兩個範例以後加上的)
#001 /**************************************************************
#002 * 檔案名稱:Driver.h
#003 * 作 者:張帆
#004 * 完畢日期:2007-11-1
#005 ************************************************************/
#006 #pragma once
#007
#008 #ifdef __cplusplus
#009 extern "C"
#010 {
#011 #endif
#012 #include <NTDDK.h>
#013 #ifdef __cplusplus
#014 }
#015 #endif
#016
#017 #define PAGEDCODE code_seg("PAGE")
#018 #define LOCKEDCODE code_seg()
#019 #define INITCODE code_seg("INIT")
#020
021 #define PAGEDDATA data_seg("PAGE")
#022 #define LOCKEDDATA data_seg()
#023 #define INITDATA data_seg("INIT")
#024
#025 #define arraysize(p) (sizeof(p)/sizeof((p)[0]))
#026 以上是先行編譯處理:匯入了NT驅動須要的標頭檔。相容到C++語言,另一些宏定義
#027 typedef struct _DEVICE_EXTENSION {
#028 PDEVICE_OBJECT pDevice;
#029 UNICODE_STRING ustrDeviceName; //裝置名稱
#030 UNICODE_STRING ustrSymLinkName; //符號連結名
#031 } DEVICE_EXTENSION, *PDEVICE_EXTENSION;
#032
#033 // 函式宣告
#034
#035 NTSTATUS CreateDevice (IN PDRIVER_OBJECT pDriverObject);//這裡是聲明建立一個裝置的函數#036 VOID HelloDDKUnload (IN PDRIVER_OBJECT pDriverObject);//這裡是聲明一個卸載驅動的函數
#037 NTSTATUS HelloDDKDispatchRoutine(IN PDEVICE_OBJECT pDevObj,
#038 IN PIRP pIrp);//這裡是聲明一個預設派遣的函數
#039
#040 extern "C"
#041 NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,
#042 IN PUNICODE_STRING RegistryPath);
//這裡是定義函數的入口,相當於main函數
接下來就是在.cpp檔案中面實現這幾個函數,大家應該也非常清楚了,就不再贅述!
參考:
http://book.51cto.com/art/200807/79760.htm
《 Windows 驅動開發技術具體解釋 》
Windows 驅動入門(二)代碼結構