searchone
驱动牛犊
驱动牛犊
  • 注册日期2003-12-31
  • 最后登录2005-05-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1184回复:1

求助~~!!!!

楼主#
更多 发布于:2005-04-25 11:08

我的驱动程序在收到应用程序DEVICE_IO_CTRL请求后,功能代码以及传输字节都是对的,但是这个pUrb总有点问题。
对于写控制,使用的I.IoctlBuffer()是正常的(不能用Mdl(),否则死机)。
对于读控制,我也想如下使用
PURB pUrb = m_Endpoint1IN.BuildBulkTransfer(
                                 I.IoctlBuffer(),  
                                 dwTotalSize,
                                 TRUE,
                                 NULL,
                                 TRUE);
但是到了m_Endpoint1IN.SubmitUrb(I, pUrb, LinkTo(ReadComplete), pCompInfo, 0);
时,就机器重新启动。郁闷啊!!!
而且测试过将I.IoctlBuffer()该为
KMemory Mem(I.Mdl());的I.Mdl());
或者PCHAR cRead = new (NonPagedPool) CHAR[dwTotalSize];
形式,也都会死机啊。找不到问题出现在哪里?dwTotalSize是等对的。

另外,他说对于DEVICE_IO_CTRL的IO请求,有METHOD_BUFFERED, METHOD_IN_DIRECT  ,METHOD_OUT_DIRECT ,METHOD_NEITHER 等方式,那么我应该在哪里设置呢?在Device *的初始化中的DO_DIRECT_IO方式仅仅是对IRP_MJ_READ/IRP_MJ_WRITE的操作方式指定啊。


另外说明:利用readfile/writefile形式的传输不会出问题,代码和上面也查不多,用的是I.Mdl().

恳切盼望高人指点。谢谢
searchone
驱动牛犊
驱动牛犊
  • 注册日期2003-12-31
  • 最后登录2005-05-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-04-26 12:46
从3.0版换到了3.2版,结果好象更糟,再换了2.7版,结果问题解决了^^^^^哎^^^不明白.
但是还有点
利用m_Lower构造一个Vendor请求
m_Lower.submit(pUrb)时总是不能返回停在这里了.除非加上同步限制时间m_Lower.submit(pUrb,NULL,NULL,100).奇怪的是,无论加上与不加,固件都能收到正常响应.而且加上后返回的代码不是TIME_OUT而是SUCCESS.但一定是在100ms后.
希望有高手指点.
游客

返回顶部