阅读:2234回复:4
请教VirtualCopy的问题。
请问VirtualCopy函数使用有什么要注意的地方吗?
为什么我调用的时候总是返回失败呢? 具体是 pVMem = (PBYTE)VirtualAlloc(0, PAGE_SIZE*2 , MEM_RESERVE, PAGE_NOACCESS); fSuccess = VirtualCopy(pVMem, (LPVOID)0x10024000, PAGE_SIZE, PAGE_READWRITE | PAGE_NOCACHE ); 其中10024000是寄存器的地址。 |
|
论坛版主
|
沙发#
发布于:2005-04-28 13:40
(LPVOID)0x10024000这个参数要么是静态映射虚拟地址,也就是物理地址在oemaddresstable里面映射出来的虚拟地址(这个虚拟地址肯定在0x80000000-0x9fffffff(可cache区)或0xa0000000到0xbfffffff(非cache区))。要么使用物理地址(你这里的应该是物理地址),则需要右移8位。
无论给什么地址,必须4k对齐 如果还不对,用getlasterror看看错误码 |
|
板凳#
发布于:2005-05-10 15:31
问题已经找到了,是因为这个地址默认是disable所以地址不存在不能被映射。enable后可以。谢谢。
|
|
地板#
发布于:2005-07-22 22:52
我也碰到这个问题,不知如何可知某地址是DISABLE的,又如何ENABLE它呢?
|
|
|
地下室#
发布于:2007-03-15 16:34
引用第1楼wxl_50685330于2005-04-28 13:40发表的“”: 搜索了论坛关于virtualcopy()的老贴,希望能引起高手对CE虚实地址映射问题的关注. wxl_50685330斑竹所说地址必须4K对齐的原因是什么呢?是否由于CE对物理内存的提交必须以页(1K或4K)为单位? |
|