#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年時間.大多數人都認為會驅動開發的都是牛人,高手之類的.其實高手,牛人不是這樣定義的.我們在學習驅動...