阅读:1184回复:1
求助~~!!!!我的驱动程序在收到应用程序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(). 恳切盼望高人指点。谢谢 |
|
沙发#
发布于: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后. 希望有高手指点. |
|