阅读:2006回复:3
用DriverWorks开发PCI驱动,用writeFile()写数据时,如何能指定端口偏移地址呢?谢谢了!
我在用DriverWorks开发PCI驱动程序时,遇到一个问题,在Write()函数中,好象只能指定一个偏移地址,这样写出来的驱动也只能从该偏移地址读写数!
如:我在应用程序中调用writeFile()向驱动程序写数据,驱动程序自动调用write() 函数,在write()函数中执行m_ioRang1.oub(port,data),port一直都是一个值。我想在writeFile()写数据时指定端口偏移地址,可不知道怎么办! 在IRP中,好像也没有地方可以指定偏移地址,真不知道怎么办? 请各位大侠指点,急啊!谢谢了! 愿意送出我所有的分数来感谢您! 难道社区中就没有高手吗? |
|
沙发#
发布于: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。 |
|
板凳#
发布于:2007-10-22 19:40
你的寄存器配置是谁做的?
里面不就有关于地址自增的设置吗? 多看看DATASHEET ! |
|
|
地板#
发布于:2007-10-27 20:19
我最近做了个,也遇到了楼主的情况.用IOCONTRL可以实现.通过应用层发带INPUTBUFFERCONTRL下去
|
|