linhao
驱动牛犊
驱动牛犊
  • 注册日期2001-04-11
  • 最后登录2011-06-09
  • 粉丝13
  • 关注0
  • 积分201分
  • 威望210点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
阅读:1982回复:2

一个奇怪的现象,关于DeviceIoControl的

楼主#
更多 发布于:2010-10-19 14:52
我想从驱动中获取一些数据,但是发现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:

根本就跳不到这里来

这是什么原因?有知道的告诉下,谢谢.
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
沙发#
发布于:2010-10-20 12:17
建议大数量时直接共享内存。
缓冲方式的内存需要二次拷贝,可能比较慢。
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2010-10-23 16:20
znsoft说的没有错,大数据量使用共享内存是比较好的选择方法,但使用DeviceIoControl也不会有这样的限制(至少我并没有发现有这样的问题).
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
游客

返回顶部