wxbfly
驱动牛犊
驱动牛犊
  • 注册日期2003-06-16
  • 最后登录2012-02-17
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:1100回复:0

使用overlap时,为什么有时会出错,有时又正确通过?附代码如下

楼主#
更多 发布于:2003-10-14 10:42
int usb_read(HANDLE h_read,void* buffer,int size,int *p_count)
{
int ret_code=SUCCESS;
OVERLAPPED lc_overlap;
DWORD ret_count;

memset(buffer,0,size);

lc_overlap.hEvent=CreateEvent(NULL,true,false,NULL);

if(!ReadFile(h_read,buffer,size,(PDWORD)p_count,&lc_overlap))
{
if(GetLastError()==ERROR_IO_PENDING)
{
ret_count=WaitForSingleObject(lc_overlap.hEvent,TIMEOUT);
if(ret_count==WAIT_TIMEOUT)
{
CancelIo(h_read);
ret_code=ETIMEOUT;
}
}
else
{
DeviceIoControl(h_read,IOCTL_JBCJ_RESET_PIPE,0,0,0,0,&ret_count,&lc_overlap);
ret_code=EUSB_READ_FAIL;
}
}

GetOverlappedResult(h_read,&lc_overlap,(PDWORD)p_count,false);
CloseHandle(lc_overlap.hEvent);
return ret_code;
}


报参数不对。但我保证参数不会有问题。
GetLastError()返回87,并且我观察过,驱动里根本就没有接收到此请求。
游客

返回顶部