#pragma code_seg(「PAGE」)
做用是將此部分代碼放入分頁內存中運行。
#pragma code_seg()
將代碼段設置爲默認的代碼段
#pragma code_seg("INIT")
加載到INIT內存區域中,成功加載後,能夠退出內存html
轉自:http://blog.csdn.net/whatday/article/details/7100855函數
Windows規定有些虛擬內存能夠交換到文件中,這類內存被稱爲分頁內存ui
有些虛擬內存永遠不會交換到文件中,這些內存叫非分頁內存spa
#define PAGEDCODE code_seg(「PAGE」);//分頁內存.net
#define LOCKEDCODE code_seg();//非分頁的unix
#define INITCODE code_seg(「INIT」);code
#define PAGEDDATA data_seg(「PAGE」);htm
#define LOCKEDDATA data_seg();blog
#define INITDATA data_seg(「INIT」);內存
例:
若是將某個函數載入到分頁內存中,可用下列的函數
#pragma PAGEDCODE
VOID Fun()
{
PAGED_CODE(); //do something
}
注意: 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)
{//do something }