wdf 驱动 io读写 win7的32位和64位地址映射有什么不同

woquNOKIA 2017-01-20 03:54:36
wdf的工程简单情况有如下:
1、io读写(还分了几个基地址,我也很奇怪。可能是3个不同的硬件)
2、编译成32位没有问题。
3、编译成64位不能正常读写io。
for (i = 0; i < nres; ++i, ++resource)//循环3次
{ // for each resource
switch (resource->Type)
{ // switch on resource type

case CmResourceTypePort:
{ // CmResourceTypePort
port = resource->u.Port.Start;
nports = resource->u.Port.Length;
needmap = (resource->Flags & CM_RESOURCE_PORT_IO) ==0;
pdx->nports[port_total] = nports;
pdx->mappedport[port_total] = needmap;
if(nports!=256&&nports!=128) //判断是否为所需的端口资源
break;
if (needmap)
{ // we have a memory-mapped register
pdx->base[port_total] = (PUCHAR) MmMapIoSpace(port, nports, MmNonCached);//地址映射,
if (!pdx->base[port_total]) {
return STATUS_NO_MEMORY;
}
} // we have a memory-mapped register
else
pdx->base[port_total] = (PUCHAR) port.LowPart;

port_total++;
break;
}
这里的32位和64位址映射有什么不同吗?我原来写的都是mem读写,32位和64位映射是一样的。不用管。这里需要修改什么特殊参数吗?有哪位大神碰到过,请指教。谢谢
思路:因为在64位上io读写不对,应该就是基地址就不对,那就是地址映射那不对。
...全文
418 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
woquNOKIA 2017-01-20
  • 打赏
  • 举报
回复
fuck,执行的路径不是地址映射,进入的是else pdx->base[port_total] = (PUCHAR) port.LowPart;

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧