windy_god
驱动牛犊
驱动牛犊
  • 注册日期2006-07-10
  • 最后登录2009-05-10
  • 粉丝0
  • 关注0
  • 积分47分
  • 威望42点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
阅读:2006回复:3

用DriverWorks开发PCI驱动,用writeFile()写数据时,如何能指定端口偏移地址呢?谢谢了!

楼主#
更多 发布于:2007-07-05 19:56
          我在用DriverWorks开发PCI驱动程序时,遇到一个问题,在Write()函数中,好象只能指定一个偏移地址,这样写出来的驱动也只能从该偏移地址读写数!
     如:我在应用程序中调用writeFile()向驱动程序写数据,驱动程序自动调用write() 函数,在write()函数中执行m_ioRang1.oub(port,data),port一直都是一个值。我想在writeFile()写数据时指定端口偏移地址,可不知道怎么办!
   在IRP中,好像也没有地方可以指定偏移地址,真不知道怎么办?
      请各位大侠指点,急啊!谢谢了!
     愿意送出我所有的分数来感谢您!
   难道社区中就没有高手吗?
chenzhang727574
驱动牛犊
驱动牛犊
  • 注册日期2007-10-19
  • 最后登录2009-12-13
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-10-20 20:12
我也是新手,在CSDN上看了长豆角的一篇文章《WDM初步--端口读写 》,根据他这篇文章给你一点参考。

你可以在应用程序(就是调用writefile的那个程序)和WDM程序里分别定义一个相同的数据结构大体如下:
typedef struct tagDATATRANSFER {
       int port;                 //操作端口
       bool bWord;           //字还是字节?
       unsigned short data;       //数据
}DATATRANSFER,*PDATATRANSFER;

然后在应用程序里把这个结构的地址作为writefile的buffer地址,在WDM程序里就可以根据这个结构确定要写的端口了,具体做法你可以参考长豆角的那篇文章。


应用这种方法,应用程序和WDM程序还可以共享一个信号量,这在中断处理时特别有用。

通过writefile或readfile,应用程序和WDM可以共享一个buffer,通过ioctl,应用程序和WDM只能共享
ioctl的输出buffer。
xp4105
论坛版主
论坛版主
  • 注册日期2006-04-02
  • 最后登录2014-03-29
  • 粉丝1
  • 关注0
  • 积分905分
  • 威望570点
  • 贡献值1点
  • 好评度162点
  • 原创分1分
  • 专家分0分
板凳#
发布于:2007-10-22 19:40
你的寄存器配置是谁做的?

里面不就有关于地址自增的设置吗?

多看看DATASHEET !
时光如流水 抓紧时间实现自我价值
thanfur
驱动牛犊
驱动牛犊
  • 注册日期2007-10-27
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望268点
  • 贡献值0点
  • 好评度39点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-10-27 20:19
我最近做了个,也遇到了楼主的情况.用IOCONTRL可以实现.通过应用层发带INPUTBUFFERCONTRL下去
游客

返回顶部