阅读:2109回复:2
一个奇怪的现象,关于DeviceIoControl的
我想从驱动中获取一些数据,但是发现DeviceIoControl里面有长度限制,
上层代码如下: char *R0_outbuf; R0_outbuf=new char[4*1024*1024]; memset(R0_outbuf,2,4*1024*1024); DWORD lpBytesReturned; int dd=DeviceIoControl( hDevice, IOCTL_GET_DATA, 0, 0, &R0_outbuf, 2*1024+336, &lpBytesReturned, 0 ); 我的输出数据最大只能是2*1024+336,如果这个值设定的大了, 驱动代码: ioControlCode = irpSp->Parameters.DeviceIoControl.IoControlCode; irp->IoStatus.Information = 0; switch (ioControlCode) { case IOCTL_GET_DATA: 根本就跳不到这里来 这是什么原因?有知道的告诉下,谢谢. |
|
沙发#
发布于:2010-10-23 16:20
znsoft说的没有错,大数据量使用共享内存是比较好的选择方法,但使用DeviceIoControl也不会有这样的限制(至少我并没有发现有这样的问题).
|
|
|
板凳#
发布于:2010-10-20 12:17
建议大数量时直接共享内存。
缓冲方式的内存需要二次拷贝,可能比较慢。 |
|
|