如何能自动捕获插入的usb设备,并且得到usb设备的名称。

解决方案 »

  1.   

    "usbview in ddk"jslisong(碧螺春) 不是已经说了吗
      

  2.   

    下面是我目前项目中使用的一个函数
    LPSTR FindDevices(void) {
    PSP_DEVICE_INTERFACE_DETAIL_DATA   DevDetailData[DEV_NUM];  GUID                             HidGuid;
      HDEVINFO                         DevInfo;
    SP_DEVICE_INTERFACE_DATA         DevData;
      PSP_DEVICE_INTERFACE_DETAIL_DATA DevDetail;
    PHIDP_PREPARSED_DATA            PreparsedData;
    HIDP_CAPS                      Capabilities;
      ULONG                            Length;
      int                              Index;
      BOOL                             ok;
      HANDLE DevHandle;
      int DevCount = 0;
      char chRet[256];
      LPSTR strRet=NULL;  memset(chRet, 0, 256);  /* Get GUID for all System HIDs */
      HidD_GetHidGuid(&HidGuid);  /* Get Device Information for all present devices */
      DevInfo = SetupDiGetClassDevs(&HidGuid, 
                                    NULL, 
                                    NULL, 
                                    (DIGCF_PRESENT | DIGCF_DEVICEINTERFACE)
                                    );  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) 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) continue;    /* Create File for Device Read/Write */
    DevHandle = CreateFile(DevDetail->DevicePath, 
                         GENERIC_READ | GENERIC_WRITE, 
                         FILE_SHARE_READ | FILE_SHARE_WRITE, 
                         (LPSECURITY_ATTRIBUTES)NULL,
                         OPEN_EXISTING, 
                         0, 
                         NULL
                               );    if (DevHandle == INVALID_HANDLE_VALUE) continue;    /* Get Preparsed Data */
    strRet = DevDetail->DevicePath;
      ok = HidD_GetPreparsedData(DevHandle, &PreparsedData);
        if (!ok) continue;    /* Get Device's Capabilities */
      HidP_GetCaps(PreparsedData, &Capabilities);    /* Remember Device Interface Detail Data for acceptable Devices */
        if ((Capabilities.UsagePage == 0xFF00) && (Capabilities.Usage == 0x0001)) {
          DevDetailData[DevCount++] = DevDetail;
          DevDetail = NULL;
        }    CloseHandle (DevHandle);  } while (DevCount < DEV_NUM);  if (DevDetail)
      {
      strRet = DevDetail->DevicePath;
    memcpy(chRet, DevDetail->DevicePath, sizeof(DevDetail->DevicePath));
    free(DevDetail);
      }  SetupDiDestroyDeviceInfoList (DevInfo);  return (char*)(strRet);
    }