jinfei
驱动牛犊
驱动牛犊
  • 注册日期2002-03-11
  • 最后登录2012-07-03
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1217回复:5

如何实现从物理地址到虚拟地址的转换

楼主#
更多 发布于:2002-12-16 09:42
如何实现从物理地址到虚拟地址的转换?

最新喜欢:

chinabirdchinab...
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-12-16 10:18
我在本站上看到过:
物理地址到虚拟地址就只有遍历了。
void PhysicalAddressToLinearAddress(ULONG pAddress)
{
unsigned int *pAddr;
unsigned int *PageDirectoryEntry=(unsigned int *)0xC0300000;
unsigned int *PageTableEntry=(unsigned int *)0xC0000000;
int i,j;
DbgPrint(\"\\n\");
for(i=0;i<1024;i++)
if((PageDirectoryEntry&0xFFFFF000)&&(PageDirectoryEntry&0x00000001))
for(j=0;j<1024;j++){
pAddr=(int *)((int)PageTableEntry+i*4096+j*4);
if((*pAddr)&0x00000001)
if(((*pAddr)&0xFFFFF000)==(pAddress&0xFFFFF000))
DbgPrint(\"%08X\\n\",
((i*4*1024*1024+j*4*1024)&0xFFFFF000)|(pAddress&0x00000FFF));
} }
你试一下。
生命驱动,活力无限!
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-12-16 12:58
能不能用?
能用别忘给分哟。
生命驱动,活力无限!
jinfei
驱动牛犊
驱动牛犊
  • 注册日期2002-03-11
  • 最后登录2012-07-03
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-12-16 13:35
编译不过去,
我现在有一个 PHYSICAL_ADDRESS 类型的地址,
我想让 APP 程序可以操作它,那么我必须把这个
PHYSICAL_ADDRESS 的地址转换到 APP 地址
才行,我看有的程序中使用了
InitializeObjectAttributes
ZwOpenSection
ObReferenceObjectByHandle
ZwMapViewOfSection
函数才得到这个地址,
我不明白为什么这样做,
有没有其它简单一点的方法
sixbobo
驱动牛犊
驱动牛犊
  • 注册日期2002-12-03
  • 最后登录2003-01-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-12-16 14:48
什么是物理地址和虚拟地址啊? :o
初学驱动,多多关照
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-12-16 17:14
编译不过去,什么错误?
生命驱动,活力无限!
游客

返回顶部