dinjee
驱动牛犊
驱动牛犊
  • 注册日期2002-05-18
  • 最后登录2016-01-09
  • 粉丝2
  • 关注0
  • 积分180分
  • 威望69点
  • 贡献值1点
  • 好评度16点
  • 原创分0分
  • 专家分0分
阅读:2137回复:4

请教VirtualCopy的问题。

楼主#
更多 发布于:2005-04-28 11:32
请问VirtualCopy函数使用有什么要注意的地方吗?
为什么我调用的时候总是返回失败呢?
具体是
pVMem = (PBYTE)VirtualAlloc(0, PAGE_SIZE*2 , MEM_RESERVE, PAGE_NOACCESS);

fSuccess = VirtualCopy(pVMem, (LPVOID)0x10024000,
            PAGE_SIZE, PAGE_READWRITE | PAGE_NOCACHE );
其中10024000是寄存器的地址。
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-04-28 13:40
(LPVOID)0x10024000这个参数要么是静态映射虚拟地址,也就是物理地址在oemaddresstable里面映射出来的虚拟地址(这个虚拟地址肯定在0x80000000-0x9fffffff(可cache区)或0xa0000000到0xbfffffff(非cache区))。要么使用物理地址(你这里的应该是物理地址),则需要右移8位。

无论给什么地址,必须4k对齐

如果还不对,用getlasterror看看错误码
根据地的兄弟们,团结就是力量
dinjee
驱动牛犊
驱动牛犊
  • 注册日期2002-05-18
  • 最后登录2016-01-09
  • 粉丝2
  • 关注0
  • 积分180分
  • 威望69点
  • 贡献值1点
  • 好评度16点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-05-10 15:31
问题已经找到了,是因为这个地址默认是disable所以地址不存在不能被映射。enable后可以。谢谢。
mala
驱动牛犊
驱动牛犊
  • 注册日期2001-08-22
  • 最后登录2018-06-01
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2005-07-22 22:52
我也碰到这个问题,不知如何可知某地址是DISABLE的,又如何ENABLE它呢?
空心菜
milkyway1888
驱动牛犊
驱动牛犊
  • 注册日期2006-10-08
  • 最后登录2011-05-07
  • 粉丝1
  • 关注0
  • 积分6分
  • 威望97点
  • 贡献值0点
  • 好评度91点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-03-15 16:34
引用第1楼wxl_506853302005-04-28 13:40发表的“”:
(LPVOID)0x10024000这个参数要么是静态映射虚拟地址,也就是物理地址在oemaddresstable里面映射出来的虚拟地址(这个虚拟地址肯定在0x80000000-0x9fffffff(可cache区)或0xa0000000到0xbfffffff(非cache区))。要么使用物理地址(你这里的应该是物理地址),则需要右移8位。

无论给什么地址,必须4k对齐

如果还不对,用getlasterror看看错误码



搜索了论坛关于virtualcopy()的老贴,希望能引起高手对CE虚实地址映射问题的关注.

wxl_50685330斑竹所说地址必须4K对齐的原因是什么呢?是否由于CE对物理内存的提交必须以页(1K或4K)为单位?
游客

返回顶部