windows驅動程式中的預先處理含義

來源:互聯網
上載者:User

 

#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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.