关于驱动的用户缓冲区问题

juojuo29   2009-7-13 01:23 楼主
请问一下:
看了DDK的文档,当用户调用DeviceIoControl的时候,驱动要获取用户传递的input和output缓冲区,需要根据IOCTL的所指定的传输方式(METHOD_BUFFERED ,METHOD_IN_DIRECT or METHOD_OUT_DIRECT 或METHOD_NEITHER )去获取。
但是,当我调用ReadFile或WriteFile的时候,并没有指定是用那种传输方式的,那么我要获取用户的缓冲区,该怎么获取呢?
另外,请问一下:
"传输方式(METHOD_BUFFERED ,METHOD_IN_DIRECT or METHOD_OUT_DIRECT 或METHOD_NEITHER )",是指对什么数据的传输方式呢?
谢谢

回复评论 (9)

帮顶。
点赞  2009-7-13 12:34
既然看了DDK,就再多点几下,不就可以找到答案了?

建议去看“CTL_CODE”“buffered I/O ”等DDK文档。里面有较为详细的描述。

传输方式一般来讲分为三种:采用缓冲区读取、直接读取、其他读取。

具体的多说也没用,还是看文档,和看DDK的示例代码吧。
点赞  2009-7-13 16:23
看你的设备Flags是DO_BUFFERED_IO还是DO_DIRECT_IO。
点赞  2009-7-13 22:30
是指要输入或输出的数据。
点赞  2009-7-13 22:33
引用: 引用 3 楼 cnzdgs 的回复:
看你的设备Flags是DO_BUFFERED_IO还是DO_DIRECT_IO。

请问这个Flag是在那里查看的呢?
点赞  2009-7-14 00:19
DEVICE_OBJECT结构里面。
点赞  2009-7-14 23:15
引用: 引用 6 楼 cnzdgs 的回复:
DEVICE_OBJECT结构里面。

是Flags 成员吧?这个属性可以设置的吗?那个API可以设备呢?在创建设备的时候好像没有设置这个Flags的参数
点赞  2009-7-15 00:42
就是Flags成员,创建设备后直接修改,不需要API。
点赞  2009-7-15 23:24
引用: 引用 8 楼 cnzdgs 的回复:
就是Flags成员,创建设备后直接修改,不需要API。

好,谢谢
点赞  2009-7-15 23:30
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复