hrbsmz
驱动牛犊
驱动牛犊
  • 注册日期2002-12-03
  • 最后登录2003-09-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1309回复:3

为何用DS产生的驱动对d12主端点读操作时死机

楼主#
更多 发布于:2003-03-01 21:11
我用DS产生的驱动出了以下现象:
枚举正常,对端点1读写也很正常,而对主端点进行读操作时死机
急死我了,拜托各位大虾拉兄弟一把,俺先谢谢了。
注:
驱动程序用DS2.7+VC6
主机程序用C++builder编写
lzl
lzl
驱动大牛
驱动大牛
  • 注册日期2001-09-11
  • 最后登录2010-06-22
  • 粉丝1
  • 关注0
  • 积分127分
  • 威望48点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-03-02 08:35
你得把代码贴出来,要不振么分析
l=z=l 我听说,灌水是使分数快速增长的有效方法
hrbsmz
驱动牛犊
驱动牛犊
  • 注册日期2002-12-03
  • 最后登录2003-09-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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
xyzxian
驱动牛犊
驱动牛犊
  • 注册日期2002-02-19
  • 最后登录2007-06-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-03-03 20:31
之前判断一下MAINTXD->pcIoBuffer是不是空,如果空就不要submit urb了。试一下,应该是这种问题吧。
金用驱动开发
游客

返回顶部