C++ VirtualProtect是否需要页面开头的地址?

C++ VirtualProtect是否需要页面开头的地址?,c++,winapi,virtualquery,C++,Winapi,Virtualquery,我需要使用VirtualProtect,我的问题是关于传递给函数的区域的地址。 它说(在MSDN上)“一个描述起始页的地址”,它必须是该页开头的地址还是该页中的任何地址? 换句话说,我应该首先使用VirtualQuery来确定页面的起始地址吗?在这两种情况下,您都不需要VirtualQuery——页面总是页面大小的倍数,通常是4kib。因此,您只需将您的号码四舍五入到最接近的页面大小 但我不认为你需要取整;我想任何地址都可以。不过,这可能值得仔细检查。在这两种情况下,您都不需要虚拟查询——页面大

我需要使用VirtualProtect,我的问题是关于传递给函数的区域的地址。 它说(在MSDN上)“一个描述起始页的地址”,它必须是该页开头的地址还是该页中的任何地址?
换句话说,我应该首先使用VirtualQuery来确定页面的起始地址吗?

在这两种情况下,您都不需要
VirtualQuery
——页面总是
页面大小的倍数,通常是4kib。因此,您只需将您的号码四舍五入到最接近的
页面大小


但我不认为你需要取整;我想任何地址都可以。不过,这可能值得仔细检查。

在这两种情况下,您都不需要
虚拟查询
——页面大小始终是
页面大小的倍数,通常为4kib。因此,您只需将您的号码四舍五入到最接近的
页面大小


但我不认为你需要取整;我想任何地址都可以。不过可能值得仔细检查。

您不需要输入页面的基址
VirtualProtect
将接受页面中的任何地址。报告明确指出:

受影响页面的区域包括包含从lpAddress参数到(lpAddress+dwSize)范围内的一个或多个字节的所有页面。这意味着跨过页面边界的2字节范围会导致更改两个页面的保护属性


如果您能够拥有跨越页面边界的两个字节的范围,那么
lpAddress
必须可能仅位于页面末尾前一个字节。页面不能只有一个字节长,因此它不在页面的开头。

您不需要传入页面的基址
VirtualProtect
将接受页面中的任何地址。报告明确指出:

受影响页面的区域包括包含从lpAddress参数到(lpAddress+dwSize)范围内的一个或多个字节的所有页面。这意味着跨过页面边界的2字节范围会导致更改两个页面的保护属性

如果您能够拥有跨越页面边界的两个字节的范围,那么
lpAddress
必须可能仅位于页面末尾前一个字节。页面不能只有一个字节长,因此它不在页面的开头