#pragma code_seg(“PAGE”)
作用是將此部分代碼放入分頁記憶體中運行。
#pragma code_seg()
將程式碼片段設定為預設的程式碼片段
#pragma code_seg("INIT")
載入到INIT記憶體地區中,成功載入後,可以退出記憶體
轉自:http://blog.csdn.net/whatday/article/details/7100855
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(); //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