基于visual c++之windows核心编程代码分析(23)遍历驱动器并获取驱动器属性

我们在进行Windows编程的时候,经常需要进行遍历驱动器并获取驱动器属性,我们来实现遍历驱动器并获取驱动器属性。请见代码实现与注释讲解

 

[cpp]  view plain  copy
  1. #define _WIN32_WINNT 0x0501  
  2. /* 头文件 */  
  3. #include <windows.h>  
  4. #include <stdio.h>  
  5. /* 预定义 */  
  6. #define BUFSIZE            MAX_PATH  
  7. /* 函数申明 */  
  8. BOOL GetDirverInfo(LPSTR szDrive);  
  9.   
  10. /* ************************************ 
  11. * 功能    应用程序主函数,遍历驱动器并调用 
  12. *       GetDirverInfo 获取驱动器属性 
  13. **************************************/  
  14. int main(void)  
  15. {  
  16.     TCHAR buf[BUFSIZE];      // 卷标信息  
  17.     HANDLE hVol;             // 卷遍历句柄  
  18.     BOOL bFlag;  
  19.   
  20.     hVol = FindFirstVolume (buf, BUFSIZE );  
  21.   
  22.     if (hVol == INVALID_HANDLE_VALUE)  
  23.     {  
  24.         printf (TEXT("No volumes found!\n"));  
  25.         return (-1);  
  26.     }  
  27.   
  28.     GetDirverInfo (buf);  
  29.   
  30.     while( FindNextVolume(  
  31.         hVol,  
  32.         buf,  
  33.         BUFSIZE  
  34.         ))  
  35.     {  
  36.         GetDirverInfo (buf);  
  37.     }  
  38.   
  39.     bFlag = FindVolumeClose(  
  40.         hVol  
  41.         );  
  42.   
  43.     return (bFlag);  
  44. }  
  45.   
  46. /* ************************************ 
  47.  * BOOL GetDirverInfo(LPSTR szDrive) 
  48.  * 功能   获取驱动器的属性 
  49.  * 参数   LPSTR szDrive 
  50.  *  指明要获取属性的驱动器的根路径 如 C:\ 
  51.  * 返回值 BOOL 是否成功 
  52.  **************************************/  
  53. BOOL GetDirverInfo(LPSTR szDrive)  
  54. {  
  55.     UINT uDriveType;  
  56.     DWORD dwVolumeSerialNumber;  
  57.     DWORD dwMaximumComponentLength;  
  58.     DWORD dwFileSystemFlags;  
  59.     CHAR szFileSystemNameBuffer[BUFSIZE];  
  60.     CHAR szDirveName[MAX_PATH];  
  61.     printf("\n%s\n",szDrive);  
  62.     uDriveType = GetDriveType(szDrive);  
  63.     switch(uDriveType)  
  64.     {  
  65.     case DRIVE_UNKNOWN:  
  66.         printf("The drive type cannot be determined. ");  
  67.         break;  
  68.     case DRIVE_NO_ROOT_DIR:  
  69.         printf("The root path is invalid, for example, no volume is mounted at the path. ");  
  70.         break;  
  71.     case DRIVE_REMOVABLE:  
  72.         printf("The drive is a type that has removable media, for example, a floppy drive or removable hard disk. ");  
  73.         break;  
  74.     case DRIVE_FIXED:  
  75.         printf("The drive is a type that cannot be removed, for example, a fixed hard drive. ");  
  76.         break;  
  77.     case DRIVE_REMOTE:  
  78.         printf("The drive is a remote (network) drive. ");  
  79.         break;  
  80.     case DRIVE_CDROM:  
  81.         printf("The drive is a CD-ROM drive. ");  
  82.         break;  
  83.     case DRIVE_RAMDISK:  
  84.         printf("The drive is a RAM disk. ");  
  85.         break;  
  86.     default:  
  87.         break;  
  88.     }  
  89.     if (!GetVolumeInformation(  
  90.         szDrive,  
  91.         szDirveName,  
  92.         MAX_PATH,  
  93.         &dwVolumeSerialNumber,  
  94.         &dwMaximumComponentLength,  
  95.         &dwFileSystemFlags,  
  96.         szFileSystemNameBuffer,  
  97.         BUFSIZE  
  98.         ))  
  99.     {  
  100.         return FALSE;  
  101.     }  
  102.     if(0!=lstrlen(szDirveName))  
  103.     {  
  104.         printf ("\nDrive Name is %s\n",szDirveName);  
  105.     }  
  106.   
  107.     printf ("\nVolume Serial Number is %u",dwVolumeSerialNumber);  
  108.     printf ("\nMaximum Component Length is %u",dwMaximumComponentLength);  
  109.     printf ("\nSystem Type is %s\n",szFileSystemNameBuffer);  
  110.   
  111.     if(dwFileSystemFlags & FILE_SUPPORTS_REPARSE_POINTS)  
  112.     {  
  113.         printf ("The file system does not support volume mount points.\n");  
  114.     }  
  115.     if(dwFileSystemFlags & FILE_VOLUME_QUOTAS)  
  116.     {  
  117.         printf ("The file system supports disk quotas.\n");  
  118.     }  
  119.     if(dwFileSystemFlags & FILE_CASE_SENSITIVE_SEARCH)  
  120.     {  
  121.         printf ("The file system supports case-sensitive file names.\n");  
  122.     }  
  123.     //you can use these value to get more informaion  
  124.     //  
  125.     //FILE_CASE_PRESERVED_NAMES  
  126.     //FILE_CASE_SENSITIVE_SEARCH  
  127.     //FILE_FILE_COMPRESSION  
  128.     //FILE_NAMED_STREAMS  
  129.     //FILE_PERSISTENT_ACLS  
  130.     //FILE_READ_ONLY_VOLUME  
  131.     //FILE_SUPPORTS_ENCRYPTION  
  132.     //FILE_SUPPORTS_OBJECT_IDS  
  133.     //FILE_SUPPORTS_REPARSE_POINTS  
  134.     //FILE_SUPPORTS_SPARSE_FILES  
  135.     //FILE_UNICODE_ON_DISK  
  136.     //FILE_VOLUME_IS_COMPRESSED  
  137.     //FILE_VOLUME_QUOTAS  
  138.     printf("...\n");  
  139.     return TRUE;  
  140. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值