阅读:1904回复:1
如何让dbgprint打印64位的地址阿
我需要把下面得到的地址作为PCI寄存器的地址使用
PVOID = MmMapIoSpace(dx->ulBAR1,sizeof(GLOBL_REGISTER),MmNonCached); 然后向这个寄存器写数据 WRITE_REGISTER_ULONG(PVOID, 0x001C0000); 现在移植64位的系统发现无法写入寄存器 我想打印这个地址 Dbgprint("%d", PVOID); 发现无法打印,谁能帮下忙啦,谢谢 |
|
沙发#
发布于: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); |
|