阅读:2105回复:2
直接方式读操作(内存映射),缓冲区大小由谁确定??
这个帖子不知道发在哪个版块。我使用DriverStudio创建PCI驱动向导时,读写方式都是采用DO_DIRECT_IO。然后在应用程序用ReadFile()函数和驱动程序,当ReadFile()第三个参数,希望读的字节数设置过小时,有时候读大数据量都不出现指针越界,蓝屏现象。但是大部分时候还是蓝屏的。然后我把这个参数设置1522字节,因为网卡接收数据最大包也就是这个。这样每次读取一个包就不会出现蓝屏了。蓝屏问题却是解决,但是在不同的机器安装驱动程序时,有的机器出现“读取失败”,暂时我还没用GetLastError()去获取错误信息。我就是想问一下,内存映射申请的缓冲区大小是不是由ReadFile()的第三个参数决定。如果我猜的是对的话,那么为什么还会出现“读取失败”的信息呢。我在驱动的读派遣函数中返回的成功啊,因为我没有用DDK。对于DriverStudio的封装模式不太懂,太多的东西不用我操心,可是越是这样,一出问题越难发现。但是作为初学者直接用DDK(WDK)还是有点难,因为有很多问题考虑不全。拜托各位大侠帮忙。
|
|
|
沙发#
发布于:2009-04-07 10:28
本人也是驱动开发新手,对于你的这个问题也有过考虑,就是驱动程序和应用程序之间的关系,在数据传送方面的考虑。IRP的读写里面是不是要规定数据传输的大小,应用程序的Read、Write里面也要规定数据传输的大小,那么岂不是驱动程序里面的传输大小会限制应用程序里面数据传输参数的设定。所以,还是一个应用程序和驱动程序之间的通讯问题,看能不能将应用程序的ReadFile里面的传输量参数传递到驱动程序中,驱动程序再根据这个参数进行数据的底层调度,我觉得应该是从这个角度去考虑。
|
|
板凳#
发布于:2009-04-14 11:48
学习。
|
|