请输入您要查询的百科知识:

 

词条 VirtualProtect
释义

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 );参数

lpAddress

[in] 指标,指向要变更保护属性的内存基址。

dwSize

[in] 要变更的记忆体分页区域的大小 (单位是字节)。但是需要注意,页面边界2字节的内存属性更改,有可能导致改变2个页的属性同时被改变

flNewProtect

[in] 要套用的记忆体保护类型。

pflOldProtect

[out] 上一个记忆体保护值的指标。

传回值

HRESULT

描述

S_OK

VirtualProtect 已成功传回。

HOST_E_CLRNOTAVAILABLE

Common Language Runtime (CLR) 尚未载入至处理序中,或者此 CLR 目前的状态无法执行 Managed 程式码或成功处理呼叫。

HOST_E_TIMEOUT

呼叫已逾时。

HOST_E_NOT_OWNER

呼叫端不具备锁定功能。

HOST_E_ABANDONED

已封锁执行绪或 Fiber 在等候事件时,该事件已遭取消。

E_FAIL

发生未知的重大错误。当方法传回 E_FAIL 时,便无法在处理序内使用 CLR。对装载方法的後续呼叫会传回 HOST_E_CLRNOTAVAILABLE。

备注 :

1.这个 VirtualProtect 实作会传回 HRESULT 值,而 Win32 实作则会传回表示成功的非零值,以及表示失败的零值。如需详细资讯,请参阅 Windows 平台的说明文件。

2.参数pflOldProtect 不能为null,最好使用PDWORD pflOldProtect=new DWORD;来定义,否则无法通过编译。

flNewProtect 访问类型

PAGE_READONLY 该区域为只读。如果应用程序试图访问区域中的页的时候,将会被拒绝访问PAGE_READWRITE 区域可被应用程序读写

PAGE_EXECUTE 区域包含可被系统执行的代码。试图读写该区域的操作将被拒绝。

PAGE_EXECUTE_READ 区域包含可执行代码,应用程序可以读该区域。

PAGE_EXECUTE_READWRITE 区域包含可执行代码,应用程序可以读写该区域。

PAGE_GUARD 区域第一次被访问时进入一个STATUS_GUARD_PAGE异常,这个标志要和其他保护标志合并使用,表明区域被第一次访问的权限

PAGE_NOACCESS 任何访问该区域的操作将被拒绝

PAGE_NOCACHE RAM中的页映射到该区域时将不会被微处理器缓存(cached)

注:PAGE_GUARD和PAGE_NOCHACHE标志可以和其他标志合并使用以进一步指定页的特征。PAGE_GUARD标志指定了一个防护页(guard page),即当一个页被提交时会因第一次被访问而产生一个one-shot异常,接着取得指定的访问权限。PAGE_NOCACHE防止当它映射到虚拟页的时候被微处理器缓存。这个标志方便设备驱动使用直接内存访问方式(DMA)来共享内存块。

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/3/19 17:09:26