一、前言
該系列前幾篇文章:
windows核心編程--1、使用vs2019編寫第一個win32項目
windows核心編程--2、windows的畫筆畫刷以及一些簡單的應用
windows核心編程--3、有關進程的三個函數
windows核心編程--4、線程和線程同步
二、相關工具
IDE:Visual Studio 2019
三、相關函數
1、VirtualAlloc
函數,作用爲分配一個虛擬內存,第一個參數爲首地址,第二個參數爲預分配內存大小,第三個參數表示是預定地址空間還是分配物理存儲器,最後一個參數保護模式,若分配成功,則返回類型爲LPVOID
的首地址。
2、VirtualFree
函數,作用爲釋放虛擬內存,第一個參數爲要釋放的地址首地址,第二個參數爲釋放內存大小,第三個參數一般設置爲MEM_DECOMMIT
。
3、VirtualQuery
函數,作用爲查詢虛擬內存屬性,第一個參數爲VirtualAlloc
函數的返回值,第二個參數爲一個類型爲MEMORY_BASIC_INFORMATION
的結果體,用來存放結果,第三個參數爲結構體的大小。
4、VirtualProtect
函數用來修改該虛擬內存的保護模式,第一個參數爲虛擬內存句柄,第二個參數爲虛擬內存大小,第三個參數爲要修改後的保護模式,第四個參數爲用來保存老的保護模式,這裏值得注意的是,在win32程序中,該參數必須使用new
的方式來初始化,例如PDWORD oldProtect = new DWORD;
四、實驗要求
1、採用虛擬內存函數VirtualAlloc,從地址“0x100000FF”分配一個n字節地址預訂和物理調撥(其中n爲各自學號),最開始地址頁屬性設置爲只讀。
2、採用VirtualQuery進行查詢虛擬內存情況,並展示出來。
3、採用VirtualProtect函數把該地址頁屬性進行修改,修改爲可讀可寫,然後將字符串“20170111”(各自學號)賦值到虛擬內存;並然後調用VirtualFree釋放虛擬內存。
五、實驗步驟
這個沒什麼好說的,調用函數即可,結果如下: