阅读:1660回复:4
DS中关于I.ioctlBuffer()函数一问
在应用程序中调用下面的函数,带一个输入缓冲区指针bufInput和一个输出缓冲区指针bufOutput作为参数。
DeviceIoControl(hDevice, D12_5402DRV_IOCTL_GET_DEVICE_DESCRIPTOR, bufInput, IOCTL_INBUF_SIZE, bufOutput, IOCTL_OUTBUF_SIZE, &nOutput, NULL) 在驱动程序DeviceControl函数中得到IRP包实例I。该实例调用I.ioctlBuffer()函数时返回指针对应应用程序中的哪个指针呢? 请教。谢谢! |
|
沙发#
发布于:2003-09-17 11:12
刚才回复帖子之后总觉得不妥,回去看了一眼书再来解答。
对于DeviceIoControl的4种方式,METHOD_BUFFERD方式可用这种方法 ,可能你用的也是这种吧,但是对于I.IoctlBuffer()做输出缓冲区,也就是返回给应用程序的缓冲区时,必须要指定I.Information, 他代表实际返回给应用程序的字节数,系统会根据I.Information,将输出缓冲区copy到应用程序。 如果你的DeviceIoContrl中既有Inbuffer,又有OutBuffer的话, I.IoctlBuffer的大小是Inbuffersize和outbuffersize中大的那一个,而且驱动程序此时必须先读Inbuffer,再写Outbuffer,具体情况我觉得你可以看看武安河写的\"WDM设备驱动程序开发\"一书 |
|
|
板凳#
发布于:2003-09-17 10:26
就是这个意思。对于你来说他只是名字一样,其实我理解还是有两个读写缓冲区。
|
|
|
地板#
发布于:2003-09-16 14:03
也就是说跟我的代码相关的?
如果我在驱动的DeviceControl()函数中有如下代码(pBuffer出现 在赋值操作符的左边) PVOID pBuffer = I.IoctlBuffer(); *pBuffer=2; 则pBuffer指向bufOutput. 如果有下面的代码(pBuffer出现在赋值操作符的右边) PVOID pBuffer = I.IoctlBuffer(); char a = *pBuffer; 则pBuffer指向bufInput. 我的理解对吗? 会不会出现既读又写的情况?那样的话岂不是没法区别了。 |
|
地下室#
发布于:2003-09-16 11:17
如果你是读这块缓冲区,他就是bufInput,如果你写这块缓冲区,他就是bufOutput,也就是给应用程序返回的缓冲区,函数名都一样,是I.ioctlBuffer()
|
|
|