乙個驅動程式標頭檔案Driver h

2021-05-22 22:32:47 字數 2041 閱讀 2104

/*********************

*檔名:driver.h

**********************/

#pragma once

#ifdef __cplusplus

extern "c"

#endif

#define pagedcode code_seg("page")

#define lockedcode code_seg()

#define initcode code_seg("init")

#define pageddata data_seg("page")

#define lockeddata data_seg()

#define initdata data_seg("init")

#define arraysize(p) (sizeof(p)/sizeof((p)[0]))

typedef struct _device_extensiondevice_extension, *pdevice_extension;

//函式宣告

ntstatus createdevice (in pdriver_object pdriverobject);

void helloddkunload (in pdriver_object pdriverobject);

ntstatus helloddkdispatchroutine (in pdevice_object pdevobj,in pirp pirp);

具體解釋

#pragma once:  #pragma的作用是設定編譯器的狀態或者是指示編譯器完成一些特定的動作,#pragma once是能夠保證標頭檔案被編譯一次。

#ifdef __cplusplus

extern "c"

#endif

上面這段**是為了包含ntddk.h標頭檔案,但是由於我們的原始檔是用c++語言編寫,如果直接包含ntddk.h,函式的符號表會匯入錯誤,因此需要加入extern "c"。

#define pagedcode code_seg("page")

#define lockedcode code_seg()

#define initcode code_seg("init")

#define pageddata data_seg("page")

#define lockeddata data_seg()

#define initdata data_seg("init")

上述的**解釋:定義分頁標記、非分頁標記和初始化記憶體塊。在windows驅動開發中,所有程式的函式和變數要被指明被載入到分頁記憶體中還是非分頁記憶體中。程式**在這裡加入了定義的巨集,就會被指明函式和變數是位於分頁記憶體還是非分頁記憶體。另外,init標誌指明該函式只是在載入的時候需要載入記憶體,當驅動程式載入成功後,該函式可以從記憶體中解除安裝掉。

核心模式記憶體分為分頁記憶體和非分頁記憶體兩種,使用者模式全是分頁記憶體,是沒許可權訪問非分頁記憶體的。非分頁記憶體區域永遠在記憶體裡,不會被倒到磁碟上去,所以它是一種很寶貴的資源。編譯指令有data_seg(「page」),指明讓變數存放在分頁記憶體裡;code_seg(「page」),指明讓程式段執行在分頁記憶體裡。

#define arraysize(p) (sizeof(p)/sizeof((p)[0]))

typedef struct _device_extensiondevice_extension, *pdevice_extension;

上述**定義了乙個裝置擴充套件結構體,這個結構體廣泛應用於驅動開發中。

ntstatus createdevice (in pdriver_object pdriverobject);

void helloddkunload (in pdriver_object pdriverobject);

ntstatus helloddkdispatchroutine (in pdevice_object pdevobj,in pirp pirp);

上述**是函式的宣告

這句**的解釋:arraysize是乙個巨集,它返回陣列中的元素個數。至於為什麼要定義這個巨集,我想可能以後程式設計的方便吧。

第乙個驅動程式

原始出處 驅動程式的開發,向來是令人感到有所畏懼的,可能很多人像我一樣,看了很久卻還是一頭霧水,不得其門而入。我們今天就通過乙個簡單的程式來使讀者學會初步的驅動程式開發。在開發windows驅動程式之前,我們需要首先安裝ddk,win98及其以前的vxd我們就不要再考慮了 windows 2000 ...

第乙個驅動程式

從今天開始就要進入核心驅動程式部分了,在這一節裡就通過第乙個驅動程式來介紹一下核心驅動模組的編寫框架。static intfirst drv open struct inode inode,struct file file static ssize t first drv write struct ...

乙個驅動程式對應多個裝置

目錄 1.對於驅動程式中有兩個關鍵的結構體 struct file filp 有乙個關鍵的成員 void private data,用於存放用於私人的資料 inode 有乙個關鍵的成員 unsigned int i flags 乙個驅動多個裝置的程式思路 1個驅動程式,1個struct file o...