阅读:1489回复:5
请教一个IoBuildDeviceIoControlRequest的菜鸟问题
用IoBuildDeviceIoControlRequest()参见IRP_MJ_DEVICE_CONTROL, 如果参数InputBuffer和OutputBuffet均不为空,那么在底层驱动中如何得到这两个buffer,好像只传入一个Irp->AssociatedIrp.SystemBuffer,它到底是InputBuffer还是OutputBuffer啊,地址和InputBuffer、OutputBuffet都不一样啊。请大侠指教!
|
|
沙发#
发布于:2004-02-13 11:29
是的,IN、Out都是它
|
|
|
板凳#
发布于:2004-02-13 14:25
是这样的,我用
pIrp = IoBuildDeviceIoControlRequest(IOCTL_BULKUSB_READ, DeviceObject, NULL, 0, rwbuf, *len, false, &kevent, &IoStatus); 创建IRP,在下层驱动中,Irp->AssociatedIrp.SystemBuffer也得到了正确的值,我用IoCompleteRequest()返回后。发现rwbuf并未填入值,为什么,我如何将Irp->AssociatedIrp.SystemBuffer得到的值返回。 |
|
地板#
发布于:2004-02-13 15:23
另外,我如果把InputBuffer和OutputBuffer都填入,那么该IRP完成后,仅会将InputBuffer中的内容拷贝到OutputBuffer,而不是拷贝出Irp->AssociatedIrp.SystemBuffer中的内容,为什么? :(
|
|
地下室#
发布于:2004-02-13 16:15
刚刚说错了,不是把InputBuffer中的内容拷贝到OutputBuffer,但也没有拷贝Irp->AssociatedIrp.SystemBuffer中的内容。我的IOCTL用的是METHOD_BUFFERED, 急啊,哪位能指点一下!
|
|
5楼#
发布于:2004-02-14 20:53
是这样的,我用 将你的参数: *len, 改成: &len, (len是rwbuf的长度) 再试试 |
|
|