-
VirtualProtect
鎖定
VirtualProtect,是對應 Win32 函數的邏輯包裝函數,它會在呼叫處理程序的虛擬位置空間裏,變更認可頁面區域上的保護。
- 外文名
- VirtualProtect
- 來 源
- Win32API
目錄
- 1 方法
- 2 參數
- ▪ lpAddress
- ▪ dwSize
- ▪ flNewProtect
- ▪ lpflOldProtect
- 3 返回值
- ▪ S_OK
- ▪ HOST_E_CLRNOTAVAIL
- ▪ HOST_E_TIMEOUT
- ▪ HOST_E_NOT_OWNER
- ▪ HOST_E_ABANDONED
- ▪ E_FAIL
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)