用mfc编写usb hid上位机,readfile 总是返回错误6

CString szTemp;
OVERLAPPED ReadOverlapped;
char ReadReportBuffer[1024];
CComboBox* pCombo = (CComboBox*)GetDlgItem(IDC_COMBO_SEARCH);

/*************************************************************************************/
/* Get GUID for all System HIDs----获取guid /
HidD_GetHidGuid(&HidGuid);
/
Get Device Information for all present devices ---获取设备信息群*/
DevInfo = SetupDiGetClassDevs(&HidGuid, NULL,NULL, (DIGCF_PRESENT | DIGCF_DEVICEINTERFACE) );
if( INVALID_HANDLE_VALUE == DevInfo)
{
AfxMessageBox("DevInfo出错,退出");
return ;
}

DevData.cbSize = sizeof(DevData);

DevDetail = NULL;

Index = -1;
/* Scan all Devices */
do {

Index++;

/* Device Interface Element of a Device Information set */
ok = SetupDiEnumDeviceInterfaces(DevInfo,0, &HidGuid,Index, &DevData);
if (ok == FALSE) 
{
    AfxMessageBox("退出");
    break;
}
/* Get Device Interface Details - Get Length */
ok = SetupDiGetDeviceInterfaceDetail(DevInfo, &DevData,  NULL,  0, &Length, NULL );

/* Allocate memory for Device Detailed Data---分配内存 */
DevDetail = (PSP_DEVICE_INTERFACE_DETAIL_DATA) malloc(Length);

/* Set cbSize in the DevDetail structure */
DevDetail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);

/* Get Device Interface Details --真正的获取接口*/
ok = SetupDiGetDeviceInterfaceDetail(DevInfo,&DevData,DevDetail, Length, NULL, NULL  );
  if (!ok) 
  {
   free(DevDetail);
   DevDetail = NULL;
   continue;
  }

  nDevDetail[Index] = (int)DevDetail;

//free(DevDetail);          //及时释放内存
/*********开始建立连接*************/
/* Create File for Device Read/Write */

DevHandle = CreateFile(DevDetail->DevicePath,NULL,FILE_SHARE_READ | FILE_SHARE_WRITE,(LPSECURITY_ATTRIBUTES)NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

if (DevHandle == INVALID_HANDLE_VALUE)
{
free(DevDetail);
DevDetail = NULL;
continue;

}
/********************获取属性信息,包括pid vid */
DevAttributes.Size = sizeof(DevAttributes);
ok = HidD_GetAttributes(DevHandle,&DevAttributes);
if(!ok)
{
free(DevDetail);
CloseHandle(DevHandle);
DevDetail = NULL;
continue;

}

if((DevAttributes.VendorID == 0x10c4 )&&(DevAttributes.ProductID == 0x8296 )) //DevDetail->DevicePath MyDevPathName
{
MyDevPathName = DevDetail->DevicePath;
DevHandle=CreateFile(DevDetail->DevicePath, GENERIC_READ , FILE_SHARE_READ|FILE_SHARE_WRITE, (LPSECURITY_ATTRIBUTES)NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,NULL);
if( (DevHandle == INVALID_HANDLE_VALUE )&&(DevHandle == 0) )
{
AfxMessageBox("读访问打开设备失败");
return;
}
Sleep(1000);

}

szTemp.Format("VID--%x  PID--%x",DevAttributes.VendorID,DevAttributes.ProductID);
pCombo ->AddString(szTemp); 

DevCount++;

/*************************************************************************************/
} while(DevCount < 20);

pCombo ->SetCurSel(0); 

void CUsb_hidDlg::OnTimer(UINT nIDEvent)
{
CString szTemp,sztr1;
LPVOID ReadReportBuffer1[1024];
OVERLAPPED ReadOverlapped1;
static int a =0;
// TODO: Add your message handler code here and/or call default
switch( nIDEvent )
{
case 1:
a++;
DevHandle=CreateFile(MyDevPathName, GENERIC_READ , FILE_SHARE_READ|FILE_SHARE_WRITE, (LPSECURITY_ATTRIBUTES)NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,NULL);
if( DevHandle != INVALID_HANDLE_VALUE )
{

ok =ReadFile(DevHandle,ReadReportBuffer1,5,NULL,&ReadOverlapped1);

          if(!ok) 
          {        
                int mm = GetLastError();
                sztr1.Format(" %d  Cannot Read Data... 读出失败  %d",a,mm);

                GetDlgItemText(IDC_EDIT_MESSAGE,szTemp);
                szTemp+=sztr1+"\r\n";   
                SetDlgItemText(IDC_EDIT_MESSAGE,szTemp);
                CloseHandle(DevHandle);
                DevDetail = NULL;

          } 
          else
          {
                sztr1.Format("%d  %s",a,ReadReportBuffer1);

                GetDlgItemText(IDC_EDIT_MESSAGE,szTemp);            
                szTemp+=sztr1+"\r\n";   
                SetDlgItemText(IDC_EDIT_MESSAGE,szTemp);
          }
    }

    break;
default:
    break;
}

CDialog::OnTimer(nIDEvent);

}

图片说明

6 句柄无效,查看你是否正确打开设备

试试看
http://tianshawuming.blog.163.com/blog/static/17088824320115965418566/
用这个调试工具先调试下。