(转)VirtualProtect、VirtualLock、VirtualUnlock
来源:互联网 发布:mac 重新分配磁盘空间 编辑:程序博客网 时间:2024/06/05 02:58
BOOL VirtualProtect(
LPVOID lpAddress,
SIZE_T dwSize,
DWORD flNewProtect,
PDWORD lpflOldProtect);
参数:
lpAddress: 输入参数,虚拟内存基地址。
dwSize: 输入参数,内存大小。
flNewProtect: 输入参数,需要设置的新的属性,具体为PAGE_READONLY、PAGE_EXECUTE、PAGE_EXECUTE_READ、PAGE_GUARD、PAGE_NOACCESS和PAGE_NOCACHE。
lpflOldProtect: 输出参数,指向保存原保护属性值的DWORD变量,可以为NULL。
返回值:
返回BOOL值,表示是否成功,可以使用GetLastError函数获取错误代码。
VirtualLock(
LPVOID lpAddress,
SIZE_T dwSize);
VirtualUnlock(
LPVOID lpAddress,
SIZE_T dwSize);
将页面锁定在物理内存中使用VirtualLock函数。这样页面将不会被交换到硬盘上,提高了访问的效率,如果要解除它,可以使用VirtualUnLock。
以上,转自:http://blog.csdn.net/sjf0115/article/details/7104365
---------------------------------------------------------------------------------------------------------------------------------------------------------------
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)来共享内存块。
以上,转自:http://baike.baidu.com/view/1786426.htm
- (转)VirtualProtect、VirtualLock、VirtualUnlock
- VirtualProtect、VirtualLock、VirtualUnlock
- VirtualLock
- VirtualProtect
- VirtualProtect()
- VirtualProtect()
- VirtualProtect函数
- VirtualProtect遇上OutputDebugString
- DEP: Ret2Libc via VirtualProtect()
- VirtualProtect() 原理(摘自Undocument NT)
- VirtualProtect导致程序crash的问题。
- VirtualProtect 2方法 -direct ret-dep-easy rm to mp3
- 利用Ret2Libc挑战DEP之二——利用VirtualProtect
- VirtualProtect 3方法 -seh ret-ASLR-dep-Adrenalin Player 2.2.5.3
- 默认win7+开启DEP win7 VirtualProtect 3方法 The KMPlayer 3.0.0.1440 WIN7 ASLR+DEP
- VirtualProtect,是对应 Win32 函数的逻辑包装函数,它会在呼叫处理程序的虚拟位址空间里,变更认可页面区域上的保护。
- 【转】
- 转
- about ServletRequest与ServletResponse
- CSDN超级大笨狼的精简代码集
- Unity3D 页游测评报告
- common-net ftp简单demo
- .NET访问ORACLE心得:疯狂重启IIS,如有神助
- (转)VirtualProtect、VirtualLock、VirtualUnlock
- 一个简单的 C 语言指针问题
- jQuery(function(){})与(function(){})(jQuery)的区别(二)
- ewebeditor漏洞利用总结
- 开始GM8126研发!
- 将应用程序从Flex 3迁移至Flex 4
- csdn大笨狼
- 打工是最愚蠢的投资(李嘉诚在深圳大梅沙演讲主题)
- vb.net Decalre声明语句说明