阅读:1800回复:11
DeviceIoControl的简单问题
DeviceIoControl在驱动的响应函数中,I.Information()是此次消息响应的返回值,我现在弄不清他是控制此次返回的数据的长度,还是说就是一个标志,提供给上层应用程序来声明此次返回数据的多少呢?
|
|
|
沙发#
发布于:2003-08-01 14:01
就是一个标志。
|
|
板凳#
发布于:2003-08-01 14:07
哦,那和我想的一样了。
|
|
|
地板#
发布于:2003-08-01 14:13
它的值是此次返回的数据的长度!
|
|
|
地下室#
发布于: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 中 |
|
|
5楼#
发布于:2003-08-01 14:25
确实是返回的长度
问一下楼上的,这个值应该是被驱动拷贝到了deviceiocontrol()函数的倒数第二个参数nBytes里吧? |
|
6楼#
发布于:2003-08-01 15:48
确实是返回的长度 不是,给用户态返回的值应该是 I/O 管理器拷贝的! |
|
|
7楼#
发布于:2003-08-01 16:05
呵呵,看来我这个半道出家做驱动的还有很多东西要学呀 :P
我说起来也做驱动不短时间了,可是连一本写驱动的书都没有认认真真的读完过! |
|
8楼#
发布于:2003-08-01 16:31
我又有点蒙了 :o
我其实想问,这个I.Information()是控制我返回数据长度的吗?就是说我本来向缓冲区中添了40个char型数据,但是我I.Information() = 10,那么它到底是返回10个char还是40个char呢? 不好意思,懒得去试,所以来问大家了。 |
|
|
9楼#
发布于:2003-08-01 16:40
这个I.Information是需要你来填充的,当每一次读或写数据完成后,驱动需要向应用程序返回,返回之前需要填充I.IoStatus.Information以及I.IoStatus.Status,前一个是你这次读写的数据量,如你前面所说就是10不是40,后一个是本次的状态
|
|
10楼#
发布于:2003-08-01 16:40
我又有点蒙了 :o 那就是说,缓冲区中前 10 个字节是有效的! |
|
|
11楼#
发布于:2003-08-08 11:06
原来如此,非常感谢
|
|
|