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

 

#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  }

轉自:http://blog.chinaunix.net/uid-24504987-id-161192.html

相關文章
相關標籤/搜索