回 帖 发 新 帖 刷新版面

主题:我知道机器上usb设备的驱动,和Guid问怎么获得设备的句柄,然后用ReadFile来访问

我的代码如下:
HANDLE OpenOneDevice(HDEVINFO hDveInfo,PSP_INTERFACE_DEVICE_DATA DvcInfoData,
                     char *sDevNameBuf)
{
   HANDLE hOut = INVALID_HANDLE_VALUE;
   ULONG iReqLen = 0;
   SetupDiGetInterfaceDeviceDetail( DveInfo,DvcInfoData,
                                    NULL,0,&iReqLen,NULL);
   ULONG iDevDataLen = iReqLen;
   PSP_INTERFACE_DEVICE_DETAIL_DATA pDevData;
   pDevData = (PSP_INTERFACE_DEVICE_DETAIL_DATA)malloc(iDevDataLen);
   pDevData->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);
   bool bResult = SetupDiGetInterfaceDeviceDetail(hDveInfo,DvcInfoData,
                  pDevData,iDevDataLen,&iReqLen,NULL);
   if(bResult == true)
   {
      strcpy(sDevNameBuf,pDevData->DevicePath);
      hOut = CreateFile(pDevData->DevicePath ,
                        GENERIC_READ|GENERIC_WRITE,
                        FILE_SHARE_READ|FILE_SHARE_WRITE,
                        NULL,
                       OPEN_EXISTING,0,NULL);
   }
   free(pDevData);
   return hOut;
}   
//-----------------------------------------------------------
HANDLE OpenUsbDevice(const GUID *pGuid,char *sDevNameBuf)
{
    HANDLE hOut = INVALID_HANDLE_VALUE;
    HDEVINFO hDevInfo ;
    ULONG n;
    SP_INTERFACE_DEVICE_DATA deviceInfoData;
    hDevInfo = SetupDiGetClassDevs(pGuid,
                                   NULL,
                                   NULL,
                                   DIGCF_PRESENT|DIGCF_INTERFACEDEVICE);
    if(hDevInfo == INVALID_HANDLE_VALUE)
    {
       return NULL ;
    }
    deviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
    ULONG nGuessCount = MAXLONG;
    for(ULONG iDevIndex=0; iDevIndex<nGuessCount; iDevIndex++)
   {
      if(SetupDiEnumDeviceInterfaces(hDevInfo, 0, pGuid, 
                                   iDevIndex, &deviceInfoData))
      {
        hOut=OpenOneDevice(hDevInfo, &deviceInfoData, sDevNameBuf);
        if(hOut != INVALID_HANDLE_VALUE)
          break;
      }
      n =  GetLastError();
      if( n == ERROR_NO_MORE_ITEMS) //No more items
      {
        break;
      }
   }
  SetupDiDestroyDeviceInfoList(hDevInfo);
  return hOut;

这段代码 SetupDiEnumDeviceInterfaces的返回值永远都是false,这是为什么啊,n的值是259,pGuid 是机器上的USB设备,比如U盘   。请大虾仁兄帮忙分析一下

回复列表 (共2个回复)

沙发

guid是注册表中的是usb guid应该是没有错误的,SetupDiGetClassDevs的返回值是正确的,但是SetupDiEnumDeviceInterfaces却总是false,请仁兄帮帮忙分析一下

板凳

没有人帮我关注一下,命苦

我来回复

您尚未登录,请登录后再回复。点此登录或注册