複製鏈接
請複製以下鏈接發送給好友

VirtualProtect

鎖定
VirtualProtect,是對應 Win32 函數的邏輯包裝函數,它會在呼叫處理程序的虛擬位置空間裏,變更認可頁面區域上的保護。
外文名
VirtualProtect
來    源
Win32API

VirtualProtect方法

當做對應之 Win32 函數的邏輯包裝函數。VirtualProtect 的 Win32 實作會在呼叫處理序的虛擬位址空間裏,變更認可頁面區域上的保護。
BOOL VirtualProtect(LPVOID lpAddress, // 目標地址起始位置DWORD dwSize, // 大小DWORD flNewProtect, // 請求的保護方式PDWORD lpflOldProtect // 保存老的保護方式);
--------------------------------------------------------------------------------------------------------------------------------
BOOL WINAPI VirtualProtect(__in LPVOID lpAddress,__in SIZE_T dwSize,__in DWORD flNewProtect,__out PDWORD lpflOldProtect);

VirtualProtect參數

VirtualProtectlpAddress

[in] 指針,指向要變更保護屬性的內存基址

VirtualProtectdwSize

[in] 要變更的記憶體分頁區域的大小 (單位是字節)。但是需要注意,頁面邊界2字節的內存屬性更改,有可能導致改變2個頁的屬性同時被改變

VirtualProtectflNewProtect

[in] 要套用的記憶體保護類型。

VirtualProtectlpflOldProtect

[out] 上一個記憶體保護值的指針。

VirtualProtect返回值

HRESULT

VirtualProtectS_OK

VirtualProtect 已成功傳回。

VirtualProtectHOST_E_CLRNOTAVAIL

Common Language Runtime (CLR) 尚未載入至處理序中,或者此 CLR 的狀態無法執行 Managed 程式碼或成功處理呼叫。

VirtualProtectHOST_E_TIMEOUT

呼叫已逾時。

VirtualProtectHOST_E_NOT_OWNER

呼叫端不具備鎖定功能。

VirtualProtectHOST_E_ABANDONED

已封鎖執行緒或 Fiber 在等候事件時,該事件已遭取消。

VirtualProtectE_FAIL

發生未知的重大錯誤。當方法傳回 E_FAIL 時,便無法在處理序內使用 CLR。對裝載方法的後續呼叫會傳回 HOST_E_CLRNOTAVAILABLE。

VirtualProtect其他信息

1.這個 VirtualProtect 實作會傳回 HRESULT 值,而 Win32 實作則會傳回表示成功的非零值,以及表示失敗的零值。如需詳細資訊,請參閲 Windows 平台的説明文件。
2.參數pflOldProtect 不能為null,最好使用PDWORD pflOldProtect=new DWORD;來定義,否則無法通過編譯。

VirtualProtect參數詳解:訪問類型flNewProt

VirtualProtectPAGE_READONLY

該區域為只讀。如果應用程序試圖訪問區域中的頁的時候,將會被拒絕訪問

VirtualProtectPAGE_READWRITE

區域可被應用程序讀寫

VirtualProtectPAGE_EXECUTE

區域包含可被系統執行的代碼。試圖讀寫該區域的操作將被拒絕。

VirtualProtectPAGE_EXECUTE_READ

區域包含可執行代碼,應用程序可以讀該區域。

VirtualProtectPAGE_EXECUTE_READW

區域包含可執行代碼,應用程序可以讀寫該區域。

VirtualProtectPAGE_GUARD

區域第一次被訪問時進入一個STATUS_GUARD_PAGE異常,這個標誌要和其他保護標誌合併使用,表明區域被第一次訪問的權限

VirtualProtectPAGE_NOACCESS

任何訪問該區域的操作將被拒絕

VirtualProtectPAGE_NOCACHE

RAM中的頁映射到該區域時將不會被微處理器緩存(cached)
注:PAGE_GUARD和PAGE_NOCHACHE標誌可以和其他標誌合併使用以進一步指定頁的特徵。PAGE_GUARD標誌指定了一個防護頁(guard page),即當一個頁被提交時會因第一次被訪問而產生一個one-shot異常,接着取得指定的訪問權限。PAGE_NOCACHE防止當它映射到虛擬頁的時候被微處理器緩存。這個標誌方便設備驅動使用直接內存訪問方式(DMA)來共享內存塊。