GetDriveType.cpp
上传用户:zhuqijet
上传日期:2007-01-04
资源大小:138k
文件大小:2k
源码类别:

驱动编程

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. /****************************************************************************
  3. *                                getDriveType
  4. * Inputs:
  5. *       LPCTSTR fullpath: Full path to some destination
  6. * Result: UINT
  7. *       DRIVE_ value as returned by GetDriveType
  8. * Effect: 
  9. *       Properly splits up the input string and figures out how to call
  10. *       GetDriveType 
  11. * Notes:
  12. * Handles the special case of \.name, and a path that includes
  13. * a file name
  14. ****************************************************************************/
  15. UINT getDriveType(LPCTSTR fullpath)
  16.     {
  17.      TCHAR drv[_MAX_PATH];
  18.      TCHAR path[_MAX_PATH];
  19.      TCHAR filename[_MAX_PATH];
  20.      TCHAR ext[_MAX_PATH];
  21.      _splitpath(fullpath, drv, path, filename, ext);
  22.      if(lstrlen(drv) != 0)
  23.         { /* drv */
  24.  return GetDriveType(drv);
  25. } /* drv */
  26.      else
  27.         { /* what else? */
  28.  // The trick here is that if the path starts with \, we try 
  29.  // GetDeviceType. If it returns DRIVE_NO_ROOT_DIR, we call
  30.  // this function recursively
  31.  // If it does not start with \, we return the result directly
  32.  UINT result = GetDriveType(path);
  33.  if(lstrlen(path) > 4 && path[0] == _T('\') && path[1] == _T('\')
  34.                               && path[2] == _T('.') && path[3] == _T('\'))
  35.     { /* \. */
  36.      LPTSTR p = &path[4]; //  \.c
  37.         //      ^
  38.              LPTSTR b = strchr(p, _T('\'));
  39.      if(b != NULL)
  40. *b = _T(':');
  41.              else
  42. lstrcat(p, _T(":"));
  43.      return GetDriveType(p);
  44.     } /* \. */
  45.  if(lstrlen(path) < 2 || path[0] != _T('\') || path[1] != _T('\'))
  46.     return result;
  47.          return GetDriveType(path);
  48. } /* what else? */
  49.     
  50.     }