使用頁面
若要判斷目前電腦上的頁面大小,請使用 GetSystemInfo 函式。
VirtualQuery 和 VirtualQueryEx 函式會傳回從行程地址空間中指定地址開始之連續頁面區域的相關信息。 VirtualQuery 會傳回呼叫程式中記憶體的相關信息。 VirtualQueryEx 傳回指定進程中記憶體的相關信息,並用來支援需要偵錯進程相關信息的調試程式。 頁面區域由向下捨入至最接近頁面邊界的指定位址確定。 它會延伸至具有下列屬性的所有後續頁面:
- 所有頁面的狀態都相同:已認可、保留或免費。
- 如果初始頁面不空閒,則該區域中的所有頁面都屬於由呼叫 VirtualAlloc預留的同一初始配置的一部分。
- 所有頁面的存取保護都相同(也就是 PAGE_READONLY、PAGE_READWRITE或 PAGE_NOACCESS)。
VirtualLock 函式可讓程序將一或多個認可的記憶體頁面鎖定在物理記憶體(RAM)中,以防止系統將這些頁面交換至分頁檔。 它可以用來確保重要數據可在沒有磁碟存取的情況下存取。 將頁面鎖定至記憶體很危險,因為它會限制系統管理記憶體的能力。 過度使用 VirtualLock 可能導致可執行程式碼被交換至分頁檔案,從而降低系統效能。 VirtualUnlock 函式會解除 VirtualLock所鎖定的記憶體。
VirtualProtect 函式可讓進程修改進程地址空間中任何已認可頁面的存取保護。 例如,程序可以分配讀取/寫入頁面來儲存敏感資料,然後它可以將存取權變更為只讀或無存取,以防止意外覆寫。 VirtualProtect 通常會與 virtualAlloc配置的頁面搭配使用,但它也適用於任何其他配置函式所認可的頁面。 不過,VirtualProtect 變更整個頁面的保護,而其他函式傳回的指標不一定對齊頁面界限。 VirtualProtectEx 函式類似於 VirtualProtect,但會變更指定進程中的記憶體保護。 變更保護對於調試程式存取所偵錯進程的記憶體很有用。