Always!978
驱动小牛
驱动小牛
  • 注册日期2002-05-09
  • 最后登录2005-04-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1800回复:11

DeviceIoControl的简单问题

楼主#
更多 发布于:2003-08-01 13:58
  DeviceIoControl在驱动的响应函数中,I.Information()是此次消息响应的返回值,我现在弄不清他是控制此次返回的数据的长度,还是说就是一个标志,提供给上层应用程序来声明此次返回数据的多少呢?
Tomorrow Never Die
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-08-01 14:01
就是一个标志。
Always!978
驱动小牛
驱动小牛
  • 注册日期2002-05-09
  • 最后登录2005-04-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-08-01 14:07
  哦,那和我想的一样了。
Tomorrow Never Die
swf2003
驱动中牛
驱动中牛
  • 注册日期2003-02-13
  • 最后登录2011-10-28
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望22点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-08-01 14:13
它的值是此次返回的数据的长度!
你的认可是对我最大的鼓励!
swf2003
驱动中牛
驱动中牛
  • 注册日期2003-02-13
  • 最后登录2011-10-28
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望22点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-08-01 14:16
typedef struct _IO_STATUS_BLOCK {
  NTSTATUS  Status;
  ULONG  Information;
} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;

DeviceIoControl 处理的返回状态在 IO_STATUS_BLOCK.Status 中
你的认可是对我最大的鼓励!
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-08-01 14:25
确实是返回的长度
问一下楼上的,这个值应该是被驱动拷贝到了deviceiocontrol()函数的倒数第二个参数nBytes里吧?
swf2003
驱动中牛
驱动中牛
  • 注册日期2003-02-13
  • 最后登录2011-10-28
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望22点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-08-01 15:48
确实是返回的长度
问一下楼上的,这个值应该是被驱动拷贝到了deviceiocontrol()函数的倒数第二个参数nBytes里吧?


不是,给用户态返回的值应该是 I/O 管理器拷贝的!
你的认可是对我最大的鼓励!
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-08-01 16:05
呵呵,看来我这个半道出家做驱动的还有很多东西要学呀 :P
我说起来也做驱动不短时间了,可是连一本写驱动的书都没有认认真真的读完过!
Always!978
驱动小牛
驱动小牛
  • 注册日期2002-05-09
  • 最后登录2005-04-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-08-01 16:31
  我又有点蒙了 :o
  我其实想问,这个I.Information()是控制我返回数据长度的吗?就是说我本来向缓冲区中添了40个char型数据,但是我I.Information() = 10,那么它到底是返回10个char还是40个char呢?
  不好意思,懒得去试,所以来问大家了。
Tomorrow Never Die
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-08-01 16:40
这个I.Information是需要你来填充的,当每一次读或写数据完成后,驱动需要向应用程序返回,返回之前需要填充I.IoStatus.Information以及I.IoStatus.Status,前一个是你这次读写的数据量,如你前面所说就是10不是40,后一个是本次的状态
swf2003
驱动中牛
驱动中牛
  • 注册日期2003-02-13
  • 最后登录2011-10-28
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望22点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-08-01 16:40
 我又有点蒙了 :o
  我其实想问,这个I.Information()是控制我返回数据长度的吗?就是说我本来向缓冲区中添了40个char型数据,但是我I.Information() = 10,那么它到底是返回10个char还是40个char呢?
  不好意思,懒得去试,所以来问大家了。


那就是说,缓冲区中前 10 个字节是有效的!
你的认可是对我最大的鼓励!
Always!978
驱动小牛
驱动小牛
  • 注册日期2002-05-09
  • 最后登录2005-04-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-08-08 11:06
  原来如此,非常感谢
Tomorrow Never Die
游客

返回顶部