- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
以下对 VirtualAlloc()
的调用在 x64 上返回错误 ERROR_INVALID_PARAMETER
:
LPVOID lp = VirtualAlloc(NULL, 0x10000000000, MEM_RESERVE, 0);
也就是说,我必须使用 PAGE_NOACCESS
作为 VirtualAlloc
的最后一个参数。但是当我查看 PAGE_NOACCESS
here 的定义时,我发现:
Disables all access to the committed region of pages. An attempt to read from, write to, or execute the committed region results in an access violation.
这与在进程虚拟地址空间中保留地址范围无关。
似乎要求 flProtect 等于 PAGE_NOACCESS
,当 flAllocationTime = MEM_RESERVE
时,是只是在 MS 文档中丢失了。有人可以证实这一点吗?
最佳答案
VirtualAlloc
的最后一个参数需要 memory protection constant .内存保护常量都不是 0,因此 0 不是有效值。这是您看到的 ERROR_INVALID_PARAMETER
错误。因此,您必须至少选择一个给定的常量。一种选择是使用 PAGE_NOACCESS
。
我承认,这在文档中不是很清楚,但一个普遍的事实是您不能假设 0
始终是任何标志参数的有效值;你总是需要检查你被允许给出的值。如果 0
是一个可接受的值,那么它将按原样列出或明确提及。
关于windows - 为什么当 flAllocationType = MEM_RESERVE 时 VirtualAlloc() 需要 flProtect = PAGE_NOACCESS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33594583/
以下对 VirtualAlloc() 的调用在 x64 上返回错误 ERROR_INVALID_PARAMETER: LPVOID lp = VirtualAlloc(NULL, 0x10000000
我是一名优秀的程序员,十分优秀!