: windows
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)
分頁記憶體,非分頁記憶體
分頁記憶體是低中斷級別的例程可以訪問的。而非分頁記憶體則是各個中斷級別的例程都可以使用的。區別在於 分頁記憶體是虛擬記憶體,在物理上未必總是能得到。作業系統實現虛擬記憶體的主要方法就是通過分頁機制。在win32中,實體地址空間,二維虛擬位址空間和實際記憶體位址是三個不同的概念。作業系統通過段選擇子構...
何謂可分頁和非分頁記憶體
何謂可分頁和非分頁記憶體 預設情況下,核心載入器會載入所有的 部分和全域性資料到非分頁記憶體中。而且,載入器是一次載入整個驅動的可執行檔案,包括相關的dll。載入後,核心載入器關閉驅動程式檔案,甚至你可以刪除當前正在執行的驅動檔案。但是,你可以告訴載入器你希望驅動的哪部分是可分頁,所謂可分頁,就是可...
分頁記憶體和非分頁記憶體區別
在寫驅動的時候,經常要呼叫exallocatepoolwithtag函式分配記憶體,其中第乙個引數可以是如下幾個 nonpagedpool 從非分頁記憶體池中分配記憶體 pagedpool 從分頁記憶體池中分配記憶體 nonpagedpoolmustsucceed 從非分頁記憶體池中分配記憶體,如果...