3611|2

90

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

做USB驱动无法读回数据,请各位高手帮忙看下这段代码是不是有错....谢过 ! [复制链接]

  1. void THVMSDevice::SerialRead(KIrp I)
  2. {
  3.         T.Trace(TraceInfo, __FUNCTION__"++.  IRP %p\n", I);
  4.         T.Trace(TraceInfo, __FUNCTION__"gotoRead -----successful!\n");

  5.         NTSTATUS status = STATUS_SUCCESS;
  6.         KMemory Mem(I.Mdl());        // Declare a memory object

  7.         // Get a pointer to the caller's buffer.  Note that this
  8.         // routine is safe on all platforms.
  9.         PUCHAR pBuffer = (PUCHAR)Mem.MapToSystemSpace();
  10.         ULONG readSize = I.ReadSize();
  11.         ULONG bytesRead = 0;
  12.         BOOLEAN bshortOK = TRUE;
  13.         T.Trace(TraceInfo, __FUNCTION__"++.  READSIZE: %l \n",readSize);

  14.         // TODO: At this point, perform any processing for IRP_MJ_READ
  15.         //                 To satisfy the read now, transfer data from the driver
  16.         //                 to the caller's buffer at "pBuffer".  Then, indicate
  17.         //                 how much data was transferred:

  18.         //I.Information() = bytesRead;//临时注释掉
  19.         I.Status() = status;
  20.        
  21.         // NextIrp completes this IRP and starts processing
  22.         // for the next IRP in the driver managed queue.
  23.         if ((readSize>PAGE_SIZE)||(readSize<64))
  24.         {
  25.                 T.Trace(TraceInfo, __FUNCTION__"@@@@@@@Readsizeout!\n");
  26.                 I.Status() = STATUS_INVALID_PARAMETER;
  27.                 ReadQueue.PnpNextIrp(I);
  28.         }
  29.         else
  30.         {
  31.                 // TODO: copy data
  32.                 //                 To satisfy the ioctl now, transfer data using the
  33.                 //                 caller's buffers at "inputBuffer" and/or "outputBuffer".  
  34.                 //                 Then, indicate how much data was transferred:
  35.                 bshortOK = readSize
  36.                
  37.                 PURB pUrb =Pipe0.BuildBulkTransfer(Mem,readSize,TRUE,NULL,bshortOK,NULL);
  38.                 if(NULL == pUrb)
  39.                 {
  40.                         T.Trace(TraceInfo, __FUNCTION__"URB IS NULL!!!!!!!!\n");
  41.                         I.Status() = STATUS_INSUFFICIENT_RESOURCES;
  42.                         ReadQueue.PnpNextIrp(I);
  43.                 }
  44.                 else
  45.                 {
  46.                         status = Pipe0.SubmitUrb(pUrb,LinkTo(OnTransferComplete),this,100);
  47.                         if ( !NT_SUCCESS(status) )
  48.                         {
  49.                                 T.Trace(TraceInfo, __FUNCTION__"SerialRead -----failed!\n");
  50.                                 I.Status() = status;
  51.                         }
  52.                         else
  53.                         {
  54.                                 T.Trace(TraceInfo, __FUNCTION__"SerialRead -----successful!\n");
  55.                         }
  56.                         ReadQueue.PnpNextIrp(I);
  57.                        
  58.                 }       
  59.         }
  60.         T.Trace(TraceInfo, __FUNCTION__"--.  IRP %p, STATUS %x\n", I, status);
  61. }  
复制代码

最新回复

你多设几处trace,用来输出缓冲区的数据,在DriverMonitor中看看数据到哪就断了。  详情 回复 发表于 2008-1-11 15:40
点赞 关注

回复
举报

86

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
DriveStudio下的?
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
你多设几处trace,用来输出缓冲区的数据,在DriverMonitor中看看数据到哪就断了。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表