walkering
驱动牛犊
驱动牛犊
  • 注册日期2005-04-02
  • 最后登录2005-05-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:999回复:3

求救:一个取HANDLE的小程序总是有问题,

楼主#
更多 发布于:2005-04-02 18:05
GUID HidGuid;
HidD_GetHidGuid(&HidGuid);
    
HDEVINFO hDevInfo;
hDevInfo=SetupDiGetClassDevs(&HidGuid,NULL,NULL,DIGCF_PRESENT|DIGCF_INTERFACEDEVICE);
    
if (hDevInfo == INVALID_HANDLE_VALUE)
{

        return;
}



DWORD MemberIndex =0;
SP_DEVICE_INTERFACE_DATA devInfoData;
devInfoData.cbSize =sizeof(devInfoData);
BOOL bSuccess = FALSE;
//CString text=\"\";
do
{
 
bSuccess =SetupDiEnumDeviceInterfaces
(hDevInfo,NULL,&HidGuid,MemberIndex,&devInfoData);
if((!bSuccess) && (GetLastError() == ERROR_NO_MORE_ITEMS))
         {
                SetupDiDestroyDeviceInfoList(hDevInfo);
if(MemberIndex>0)
{
UpdateData(TRUE);
m_status = \"....\";
UpdateData(FALSE);
return;
          }
else
{
UpdateData(TRUE);
           m_status = .....!\";
UpdateData(FALSE);
return;
}
      }
      else
      {

ULONG Length = 0,Required;
           PSP_DEVICE_INTERFACE_DETAIL_DATA detailData;
            SetupDiGetDeviceInterfaceDetail(hDevInfo,&devInfoData,NULL,0,&Length,NULL);
DWORD dw = GetLastError();
 
detailData =(PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(Length);
detailData ->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
 
   
 Required = Length;
 if (0==SetupDiGetDeviceInterfaceDetail(hDevInfo,&devInfoData,detailData,Length,NULL,NULL))
{
  dw = GetLastError();
free(detailData);
          SetupDiDestroyDeviceInfoList(hDevInfo);
return;
}


                    HANDLE DeviceHandle =NULL;
 
  //add
          char Path[MAX_PATH];
memset(Path,0,MAX_PATH);
strcpy(Path,detailData->DevicePath);
strcat(Path,\"PIPE03\");
//add end
              
         DeviceHandle =CreateFile(Path,GENERIC_READ|GENERIC_WRITE ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);
           if (DeviceHandle == INVALID_HANDLE_VALUE)
{
dw = GetLastError();
  return;
}
else
{
          HIDD_ATTRIBUTES Attributes;
          Attributes.Size = sizeof(Attributes);
HidD_GetAttributes(DeviceHandle,&Attributes);
  UpdateData(TRUE);
  CString strTemp;
  strTemp.Format(\"%d\",Attributes.ProductID);
  m_productid = strTemp;
  //CStirng strTemp;
  //int nTemp;
  //strTmep.format(\"%d\",nTemp);
  strTemp.Format(\"%d\",Attributes.VendorID);
  m_vendorid = strTemp;
  UpdateData(FALSE);

 
  PHIDP_PREPARSED_DATA PreparsedData;
  HidD_GetPreparsedData(DeviceHandle,&PreparsedData);
 
  HIDP_CAPS Capabilities;
  HidP_GetCaps(PreparsedData,&Capabilities);
 
    UpdateData(TRUE);
  strTemp.Format(\"%x\",Capabilities.UsagePage);
  m_use1 =strTemp;
  strTemp.Format(\"%x\",Capabilities.Usage);
  m_use2 =strTemp;
  UpdateData(FALSE);
  CloseHandle(DeviceHandle);
      SetupDiDestroyDeviceInfoList(hDevInfo);
  HidD_FreePreparsedData(PreparsedData);
  }
  }
  MemberIndex =MemberIndex +1;

}while(bSuccess);


    大体就是这样的,最开始的时候调用CreateFile中的路径只是采用PSP_DEVICE_INTERFACE_DETAIL_DATA中的路径,不过总是出错.所以看了一下前面的文章,说是需要PIPE号,所以就加了进来,不过还是有问题,请大家帮忙看看,谢谢
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-04-02 21:08
你都没有对你需要的设备进行判断,当找到你的设备后应该退出while循环了
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
walkering
驱动牛犊
驱动牛犊
  • 注册日期2005-04-02
  • 最后登录2005-05-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-04-02 21:23
每当运行时总是出现错误\"5\" Access is denied.  ERROR_ACCESS_DENIED

由于CreateFile其他参数都是不变的,所以可能是路径出现了问题,不过检查前边的部分感觉得到的都没问题,另外,我得到的HANDLE是0xffffffff.

walkering
驱动牛犊
驱动牛犊
  • 注册日期2005-04-02
  • 最后登录2005-05-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-04-02 21:33
程序是在第一轮就出现的问题,主要就是不能正确取出句柄,另外程序是打算通过判断功能来进行查找的,只是还没有加进去.
游客

返回顶部