windows驅動程式中的預處理含義

2022-03-02 03:12:31 字數 1148 閱讀 2491

#pragma  code_seg(「page」)

作用是將此部分**放入分頁記憶體中執行。

#pragma  code_seg()

將**段設定為預設的**段

#pragma  code_seg("init")

載入到init記憶體區域中,成功載入後,可以退出記憶體

**:windows規定有些虛擬記憶體可以交換到檔案中,這類記憶體被稱為分頁記憶體

有些虛擬記憶體永遠不會交換到檔案中,這些記憶體叫非分頁記憶體

#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」);

例:

如果將某個函式載入到分頁記憶體中,可用下列的函式

#pragma pagedcode

void fun()

注意:paged_code()是ddk提供的巨集,只在check版本中生效,它會檢查這個函式是否執行在低於dispatch_leval的中斷請求,如果等於或高於這個中斷請求級,則產生乙個斷言。當程式執行在dispatch_level之上時(包括本層),程式只能使用非分頁記憶體,否則將導致藍屏宕機

如果將某個函式載入到非分頁記憶體中,可用下列的函式

#pragma lockedcode

void

fun()

某個例程需要在初始化的時候載入記憶體,然後可以從記憶體中解除安裝掉,比如driverentry情況下,driverentry會很大,佔據很大的空間,為了節省記憶體,需要及時地從記憶體中解除安裝

#pragma initcode

ntstatus driverentry(

in pdriver_object pdriverobject,

in punicode_string registerpath)

**:

windows驅動程式開發初探

最近,由於需求推動,自己得開始學一下在windows下如何開發驅動程式。雖然,後來由於其他的原因使得學習沒繼續下去,但是我還是把一些粗略的學習經歷與體會寫在這裡,方便自己日後捲土重來,也方便其他的對windows開發一竅不通的有志之士參考一下。一 開發的目的 二 開發的歷程 1 學習的歷程 要開發出...

Windows驅動程式的基本結構

以下均為個人見解,如果有誤,敬請指正,謝謝 windows驅動程式的兩個重要的資料結構,驅動裝置物件driver object 裝置物件結構device object,這裡簡略了兩個結構體中的成員,具體的網上都是,自己去搜吧 1 typedef struct driver objectdriver ...

如何學習Windows驅動程式開發

很多人都對驅動開發有興趣,但往往找不到正確的學習方式.當然這跟驅動開發的本土化資料少有關係.大多學的驅動開發資料都以英文為主,這樣讓很多驅動初學者很頭疼.本人從事驅動開發時間不長也不短,大概也就3 4年時間.大多數人都認為會驅動開發的都是牛人,高手之類的.其實高手,牛人不是這樣定義的.我們在學習驅動...