fireguns_y
驱动牛犊
驱动牛犊
  • 注册日期2004-06-01
  • 最后登录2011-12-07
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
阅读:1902回复:1

如何让dbgprint打印64位的地址阿

楼主#
更多 发布于:2008-05-22 18:57
    我需要把下面得到的地址作为PCI寄存器的地址使用
PVOID = MmMapIoSpace(dx->ulBAR1,sizeof(GLOBL_REGISTER),MmNonCached);

然后向这个寄存器写数据
WRITE_REGISTER_ULONG(PVOID, 0x001C0000);

现在移植64位的系统发现无法写入寄存器

我想打印这个地址
Dbgprint("%d", PVOID);
发现无法打印,谁能帮下忙啦,谢谢
fireguns_y
驱动牛犊
驱动牛犊
  • 注册日期2004-06-01
  • 最后登录2011-12-07
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-05-28 11:57
问题已经解决,分享经验如下
好几天没来,问题已经解决。

// 得到PCI板卡内存资源的物理地址
PHYSICAL_ADDRESS  addrBase;
PHYSICAL_ADDRESS  addr;
PVOID pVirAddr;
addrBase = pPartialDescriptor->u.Memory.Start;

// 取偏移量为0x100的寄存器的线性地址
addr.LowPart =addrBase.LowPart+0x100;
pVirAddr = MmMapIoSpace(addr,  4, MmNonCached);
// 将数据写入此寄存器
WRITE_REGISTER_ULONG(pVirAddr, 0x00010000);

以上代码在32位操作系统下没有任何问题。但是在64位操作系统下就有错误
如下改正后,正常运行。
// 取偏移量为0x100的寄存器的线性地址
addr.HighPart = addrBase.HighPart;
addr.LowPart =addrBase.LowPart+0x100;

呵呵,偶的经验如此,什么原因造成错误,相信不需要我写出来了。
偶是小鸟,才会出这种错误,希望能够给大家作为借鉴。

附:
打印地址
DbgPrint("%p", pVirAddr);
游客

返回顶部