资讯   |   开发   |   选机中心   |   产品大全 | IBM | 惠普 | 联想 | 戴尔 | 苹果 | 神舟
更多: | 华硕 | 明基 | 方正 | 紫光 | TCL | 夏新 | 联宝 | 宏碁 | 七喜 | 长城 | 清华同方 | 海尔 | 三星 | 东芝 | 索尼 | 富士通 | LG | 技术 | ddnoon
当前位置:笔记本 > 软件开发 >
Advertisement
文章正文

如何获得指定的USB设备(MP3播放器)的盘符问题

类型:转载   责任编辑:asp.net   日期:2007/05/23


热门软件下载:


   

如何通过编程获得所有指定的USB设备在电脑上所占的盘符(如E,F...),请给出完整的解决方案或者最好能给出完整的代码.谢谢!

网友回答:

发表者:huaboy408

http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=193595

发表者:laker_tmj

up   learn

发表者:pepsi1980

BOOL   GetDisksProperty(HANDLE   hDevice,   PSTORAGE_DEVICE_DESCRIPTOR   pDevDesc)  
  {  
  STORAGE_PROPERTY_QUERY Query; //   input   param   for   query  
  DWORD   dwOutBytes; //   IOCTL   output   length  
  BOOL   bResult; //   IOCTL   return   val  
   
  //   specify   the   query   type  
  Query.PropertyId   =   StorageDeviceProperty;  
  Query.QueryType   =   PropertyStandardQuery;  
   
  //   Query   using   IOCTL_STORAGE_QUERY_PROPERTY    
  bResult   =   ::DeviceIoControl(hDevice, //   device   handle  
  IOCTL_STORAGE_QUERY_PROPERTY, //   info   of   device   property  
  &Query,   sizeof(STORAGE_PROPERTY_QUERY), //   input   data   buffer  
  pDevDesc,   pDevDesc->Size, //   output   data   buffer  
  &dwOutBytes, //   outs   length  
  (LPOVERLAPPED)NULL);  
   
  return   bResult;  
  }  
   
  /****************************************************************************  
  *  
  *         FUNCTION:   chFirstDriverFrameMask(ULONG   unitmask)  
  *  
  *         PURPOSE:     get   the   logic   name   of   driver  
  *  
  ****************************************************************************/  
  char   chFirstDriveFromMask   (ULONG   unitmask)  
  {  
   
              char   i;  
              for   (i   =   0;   i   <   26;   ++i)      
              {  
                        if   (unitmask   &   0x1)    
  break;  
                          unitmask   =   unitmask   >>   1;  
              }  
          return   (i   +   A);  
  }  
   
  /****************************************************************************  
  *  
  *         FUNCTION:   ReInitUSB_Disk_Letter()  
  *  
  *         PURPOSE:     get   the   usb   disks,   and   filling   the   szMoveDiskName   with   them  
  *  
  ****************************************************************************/  
  void   ReInitUSB_Disk_Letter()  
  {  
  int   k   =   0;  
  DWORD MaxDriveSet,   CurDriveSet;  
  DWORD drive,   drivetype;  
  TCHAR szBuf[300];  
  HANDLE hDevice;  
  PSTORAGE_DEVICE_DESCRIPTOR   pDevDesc;  
   
  for(k=0;   k<26;   k++)  
  szMoveDiskName[k]   =   \0;  
  k   =   1;  
  //   Get   available   drives   we   can   monitor  
  MaxDriveSet   =   CurDriveSet   =   0;  
   
  MaxDriveSet   =   GetLogicalDrives();  
  CurDriveSet   =   MaxDriveSet;  
  for   (   drive   =   0;   drive   <   32;   ++drive   )      
  {  
  if   (   MaxDriveSet   &   (1   <<   drive)   )      
  {  
  DWORD   temp   =   1<<drive;  
  _stprintf(   szDrvName,   _T("%c:\\"),   A+drive   );  
  switch   (   GetDriveType(   szDrvName   )   )      
  {  
  case   0: //   The   drive   type   cannot   be   determined.  
  case   1: //   The   root   directory   does   not   exist.  
  drivetype   =   DRVUNKNOWN;  
  break;  
  case   DRIVE_REMOVABLE: //   The   drive   can   be   removed   from   the   drive.  
  drivetype   =   DRVREMOVE;  
  szMoveDiskName[k]   =   chFirstDriveFromMask(temp);  
  szMoveDiskName[0]=k;  
  k++;  
  break;  
  case   DRIVE_CDROM: //   The   drive   is   a   CD-ROM   drive.  
  break;  
  case   DRIVE_FIXED: //   The   disk   cannot   be   removed   from   the   drive.  
  drivetype   =   DRVFIXED;  
  sprintf(szBuf,   "\\\\?\\%c:",   A+drive);  
  hDevice   =   CreateFile(szBuf,   GENERIC_READ,  
  FILE_SHARE_READ   |   FILE_SHARE_WRITE,   NULL,   OPEN_EXISTING,   NULL,   NULL);  
   
  if   (hDevice   !=   INVALID_HANDLE_VALUE)  
  {  
   
  pDevDesc   =   (PSTORAGE_DEVICE_DESCRIPTOR)new   BYTE[sizeof(STORAGE_DEVICE_DESCRIPTOR)   +   512   -   1];  
   
  pDevDesc->Size   =   sizeof(STORAGE_DEVICE_DESCRIPTOR)   +   512   -   1;  
   
  if(GetDisksProperty(hDevice,   pDevDesc))  
  {  
  if(pDevDesc->BusType   ==   BusTypeUsb)  
  {  
  szMoveDiskName[k]   =   chFirstDriveFromMask(temp);  
  szMoveDiskName[0]=k;  
  k++;  
  }  
  }  
   
  delete   pDevDesc;  
  CloseHandle(hDevice);  
  }  
   
  break;  
  case   DRIVE_REMOTE: //   The   drive   is   a   remote   (network)   drive.  
  drivetype   =   DRVREMOTE;  
  szMoveDiskName[k]   =   chFirstDriveFromMask(temp);  
  szMoveDiskName[0]=k;  
  k++;  
  break;  
  case   DRIVE_RAMDISK: //   The   drive   is   a   RAM   disk.  
  drivetype   =   DRVRAM;  
  break;  
  }  
  }  
  }  
   
  }


 

 
热门推荐笔记本: LG笔记本
相关文章:
笔记本相关:
IT技术文章:
webmaster:popbb@126.com   最佳浏览:1024X768 MSIE
©2007 popbb.net All Rights Reserved