阅读:1309回复:3
为何用DS产生的驱动对d12主端点读操作时死机
我用DS产生的驱动出了以下现象:
枚举正常,对端点1读写也很正常,而对主端点进行读操作时死机 急死我了,拜托各位大虾拉兄弟一把,俺先谢谢了。 注: 驱动程序用DS2.7+VC6 主机程序用C++builder编写 |
|
沙发#
发布于:2003-03-02 08:35
你得把代码贴出来,要不振么分析
|
|
|
板凳#
发布于:2003-03-02 12:28
进行读操作的源程序:
NTSTATUS UsbDevice::Read(KIrp I) { PURB pUrb; KMemory Mem(I.Mdl()); PUCHAR pBuffer=PUCHAR(Mem.VirtualAddress()); USB_COMPLETION_INFO* pCompInfo = new (NonPagedPool) USB_COMPLETION_INFO; if (pCompInfo == NULL) { I.Information() = 0; return I.PnpComplete(this, STATUS_INSUFFICIENT_RESOURCES); } if(*pBuffer==EndPoint1In)//**************对端点1读操作中断方式正常 { : : } else if(*pBuffer==EndPoint2In)//**************对主端点读操作 { ULONG dwTotalSize = I.ReadSize(CURRENT); main_txd * MAINTXD=(main_txd *)pBuffer; if (dwTotalSize >MAINTXD->MaxSize) { ASSERT(MAINTXD->MaxSize); dwTotalSize =MAINTXD->MaxSize; } pUrb = m_maintxd.BuildBulkTransfer( MAINTXD->pcIoBuffer, dwTotalSize, TRUE, NULL ); if (pUrb == NULL) { delete pCompInfo; I.Information() = 0; return I.PnpComplete(this, STATUS_INSUFFICIENT_RESOURCES); } NTSTATUS status; status = m_maintxd.SubmitUrb(I, pUrb,LinkTo(ReadComplete), pCompInfo, 0);//在此处系统无响应 return status; } } 注: m_maintxd.Initialize(m_Lower, 0x82, 64); 由DS自动生成。 驱动及WIN32程序中共同定义 #define EndPoint1In 3 #define EndPoint1Out 2 #define EndPoint2In 5 #define EndPoint2Out 4 struct main_txd { unsigned char pipenum; unsigned char pcIoBuffer[64]; unsigned char MaxSize; }; 兄弟用DS是个新手,劳烦大虾帮忙找一下毛病,嫌给分少尽管吱声,如果哪位兄弟用DS写的驱动能正常运行 不妨给我发一份源程序,让俺学习学习。 EMAIL:heroes78@up369.com |
|
地板#
发布于:2003-03-03 20:31
之前判断一下MAINTXD->pcIoBuffer是不是空,如果空就不要submit urb了。试一下,应该是这种问题吧。
|
|
|