tough_lion
驱动牛犊
驱动牛犊
  • 注册日期2006-05-08
  • 最后登录2007-09-08
  • 粉丝0
  • 关注0
  • 积分370分
  • 威望38点
  • 贡献值0点
  • 好评度37点
  • 原创分0分
  • 专家分0分
阅读:1963回复:3

请教64bit 平台下IO_STATIC_LOCATION结构的改变

楼主#
更多 发布于:2007-05-04 11:09
  大家好,这里请教一个关于64 bit 平台下取到的IO_STATIC_LOCATION结构与32 bit平台不一致的问题。
我的source如下:
    PIO_STACK_LOCATION irpSp;
                PKS_DATAFORMAT_VIDEOINFOHEADER pVideoInfoHeader ;
                   irpSp = IoGetCurrentIrpStackLocation(Irp);
                if(irpSp->MajorFunction == IRP_MJ_CREATE)
               {
                  pVideoInfoHeader = (PKS_DATAFORMAT_VIDEOINFOHEADER)((UCHAR*)(irpSp-        >FileObject->FileName.Buffer) + 142);
               //取到InfoHeader结构后打印出宽和高度
             KdPrint(("IRP_MJ_CREATE: width , height =%d,%d \n",
                pVideoInfoHeader->VideoInfoHeader.bmiHeader.biWidth,
                pVideoInfoHeader->VideoInfoHeader.bmiHeader.biHeight));
               }
以上Source在32bit的XP平台下挂载驱动,运行正常,然后在64 bitXP下使用2003DDK编译后挂载,运行时取到的结构变量是错值。这里诚心请教各位有这方面经验的朋友指点一二,不胜感激
tough_lion
驱动牛犊
驱动牛犊
  • 注册日期2006-05-08
  • 最后登录2007-09-08
  • 粉丝0
  • 关注0
  • 积分370分
  • 威望38点
  • 贡献值0点
  • 好评度37点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-05-08 08:45
Dears,这个问题已解决,原因是由于从32 bit到64 bit环境切换后,IO_STACK_LOCATION结构发生了变化,导致FileName文件内核地址发生了改变,即需要重新右移8位已对齐
tough_lion
驱动牛犊
驱动牛犊
  • 注册日期2006-05-08
  • 最后登录2007-09-08
  • 粉丝0
  • 关注0
  • 积分370分
  • 威望38点
  • 贡献值0点
  • 好评度37点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-05-08 08:46
大家以后在做类似平台支持时请注意,别犯类似同样的错误
action3210
驱动小牛
驱动小牛
  • 注册日期2008-02-27
  • 最后登录2010-09-17
  • 粉丝1
  • 关注1
  • 积分20分
  • 威望194点
  • 贡献值0点
  • 好评度69点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-09-08 12:06
重新右移8位,(PKS_DATAFORMAT_VIDEOINFOHEADER)((UCHAR*)(irpSp-     >FileObject->FileName.Buffer) + 150)吗?似乎还是出错
游客

返回顶部