[WinAPI] API 5 [遍历驱动器并获取驱动器属性]-阿里云开发者社区

开发者社区> 史迪奇2号> 正文

[WinAPI] API 5 [遍历驱动器并获取驱动器属性]

简介:
+关注继续查看


 

 

(1) GetLogicalDrives。
获取主机中所有的逻辑驱动器,以BitMap的形式返回.
◇返回值
GetLogicalDrive函数返回一个DWORD类型的值,第一位表示所对应的驱动器是否存在。一般情况下DWORD的数据长度是32位,在这个DWORD中,每一位对应了一个逻辑驱动器是否存在。第二位如果是“1”则表示驱动器“B:”存在,第4位如果是“1”则表示驱动器“D:”是存在的,以此类推。


(2) GetLogicalDriverStrings。
获取主机中所有驱动器,以驱动器根路径字符串返回.
◇参数
nBufferLength:参数lpBuffer所指向的内存空间的大小,以字节为单位。
lpBuffer:指向存储返回结果字符串的内存空间。

◇返回值
函数的返回值指明了函数调用是否成功,如果成功则返回缓冲区中返回结果的总长度。如果返回值大于nBufferLength,说明给定的缓冲区大小不够,返回值是实际需要的大小。如果返回0,则说明函数运行出错。
◇使用说明
这个API实现了与GetLogicalDrives同样的功能,却以一种更直观的方式返回执行结果。函数执行结果放在lpBuffer所指向的内存区域中,此内存区域大小由nBufferLength参数指定,使函数返回结果不至于溢出。在调用此函数前需保证内存分配。

 

(3)FindFirstVolume。
查找主机中的第一个驱动器,返回驱动器设备名.

◇参数
lpszVolumeName:指向驱动器名的内存缓冲区。
cchBufferLength:参数lpszVolumeName所指向的缓冲区大小,以字节为单位。
◇返回值
驱动器查找句柄,F猫NextVolume和FindVolumeColse的参数,如果执行失败,返回NULL。


(4)FindNextVolume
查找主机中后继的逻辑驱动器◇参数
hFindVolume: FindFirstVolume所返回的驱动器查找句柄。
lpszVolumeName:指向保存驱动器名的内存缓冲区。
cchBufferLength:参数lpszVolumeName所指向的缓冲区大小,以字节为单位。
◇返回值
返回BOOL表示是否成功,如果失败说明已经查找完成所有逻辑驱动器。


(5)FindVo1umeClose。
关闭FindFirstVolume打开的卷遍历句柄◇参数
hFindVolume:要关闭的驱动器查找句柄。
◇返回值
返回BOOL值表示是否成功关闭句柄。


(6) GetDriveType。
获取驱动器类型◇参数
lpRootPathIName:驱动器根路径,如“C:\”。
◇返回值
驱动器的类型,如DRIVE' FIXED表示硬盘,DRIVE_CDROM表示光盘等。详见实例4-2的GetDirverInfo函数。


(7) GetVolumeInformation。
获取逻辑驱动器信息,◇参数
lpRootPathName:输入参数,指向所要获取属性的驱动器的根路径字符串。
lpVolumeNameBuffer:输出参数,返回驱动器名。
nVolumeNameSize:输入参数,lpVolumeNameBuffer的内存缓冲区大小。
lpVolumeSerialNumber:输出参数,存储驱动器序列号。
lpMaximumComponentLength:输出参数,返回文件系统所支持的文件组成部分的最大值。
lpFileSystemFlags:输出参数,属性可以用来判断多种驱动器属性值,如FILE_VOLUME_
QUOTAS表示支持磁盘配额,FILE_SUPPORTS_ENCRYPTION表示文件系统是否支持EFS加密等。
lpFileSystemNameBuffer:输出参数,表示文件系统类型,如“NTFS”、“CDFS”等。
nFileSystemNameSize: lpFileSystemNameBuffer的缓冲区大小。
◇返回值
返回BOOL值,表示信息获取是否成功。

 

复制代码
  1 /*
  2 遍历驱动器并获取驱动器属性
  3 */
  4 #include<windows.h>
  5 #include<stdlib.h>
  6 #include<stdio.h>
  7 
  8 #define BUFSIZE 1024
  9 
 10 BOOL GetDirverInfo(LPSTR szDrive);
 11 
 12 void main()
 13 {
 14     CHAR szLogicalDriveStrings[BUFSIZE];
 15     PCHAR szDrive;
 16 
 17     ZeroMemory(szLogicalDriveStrings,BUFSIZE);
 18     //获取逻辑驱动器卷名
 19     GetLogicalDriveStringsA(BUFSIZE-1,szLogicalDriveStrings);
 20     szDrive=(PCHAR)szLogicalDriveStrings;
 21     //循环处理每个卷
 22     do
 23     {
 24         if(!GetDirverInfo(szDrive))
 25         {
 26             printf("\nGet Volume Information Error: %d",GetLastError());
 27         }
 28         szDrive+=(lstrlenA(szDrive)+1);
 29     }
 30     while(*szDrive!='\x00');
 31 }
 32 /*
 33 *功能:获取驱动器的属性
 34 *参数:指明获取驱动器的根路径,如C:\
 35 *返回:BOOL是否成功
 36 */
 37 BOOL GetDirverInfo(LPSTR szDrive)
 38 {
 39     UINT uDriveType;
 40     DWORD dwVolumeSerialNumber;
 41     DWORD dwMaximumComponentLength;
 42     DWORD dwFileSystemFlags;
 43     CHAR szFileSystemNameBuffer[BUFSIZE];
 44     CHAR szDirveName[MAX_PATH];
 45     printf("\n%s\n",szDrive);
 46     uDriveType=GetDriveTypeA(szDrive);
 47     switch(uDriveType){
 48     case DRIVE_UNKNOWN:
 49         printf("The drive type cannot be determind.");
 50         break;
 51     case DRIVE_NO_ROOT_DIR:
 52         printf("The root path is invalid,for example,no volume is mounted at the path.");
 53         break;
 54     case DRIVE_REMOVABLE:
 55         printf("The drive is a type that has removable media,for example,a floppy drive or removable hard disk.");
 56         break;
 57     case DRIVE_FIXED:
 58         printf("The drive is a type that cannot be removed,for example,a fixed hard drive.");
 59         break;
 60     case DRIVE_REMOTE:
 61         printf("The drive is a remote (network) drive.");
 62         break;
 63     case DRIVE_CDROM:
 64         printf("The drive is a CD-ROM drive.");
 65         break;
 66     case DRIVE_RAMDISK:
 67         printf("The drive is a RAM disk.");
 68         break;
 69     default:
 70         break;
 71     }
 72     if(!GetVolumeInformationA(
 73         szDrive,
 74         szDirveName,
 75         MAX_PATH,
 76         &dwVolumeSerialNumber,
 77         &dwMaximumComponentLength,
 78         &dwFileSystemFlags,
 79         szFileSystemNameBuffer,
 80         BUFSIZE
 81         ))
 82     {
 83         return false;
 84     }
 85     printf("\nVolume Serial Number is %u",dwVolumeSerialNumber);
 86     printf("\nMaximum Component Length is %u",dwMaximumComponentLength);
 87     printf("\nSystem Type is %s\n",szFileSystemNameBuffer);
 88     if(dwFileSystemFlags & FILE_VOLUME_QUOTAS)
 89     {
 90         printf("The file system supports disk quotas.\n");
 91     }
 92     if(dwFileSystemFlags & FILE_CASE_SENSITIVE_SEARCH)
 93     {
 94         printf("The file system supports case-sensitive file names.\n");
 95     }
 96     //you can use these value to get more information
 97     //FILE_CASE_PRESERVED_NAMES
 98     //FILE_CASE_SENSITIVE_SEARCH
 99     //FILE_FILE_COMPRESSION
100     //FILE_NAMED_STREAMS
101     //...
102     return TRUE;
103 }
复制代码


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9997 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
2958 0
Samsung_tiny4412(驱动笔记06)----list_head,proc file system,GPIO,ioremap
/**************************************************************************** * * list_head,proc file system,GPIO,ioremap * * 声明: * 1.
598 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
10880 0
NTFS驱动器BUG瞬间瘫痪Win7/8.1电脑:赶快升级
又一个理由逼你升级Windows 10……   有研究人员发现,Windows Vista/7/8.1操作系统存在一个陈旧的BUG,NTFS格式的驱动器中,$MFT是禁用词,因为一旦被系统检测到带有该名字的文件在NTFS驱动器目录中出现(例如c:$MFTS),就会将其锁定并禁止一切操作。
947 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13792 0
dell m14x 驱动 WIN7 64位
http://www.dell800.com/thread-56276-1-1.html
492 0
Samsung_tiny4412(驱动笔记07)----spinlock,semaphore,atomic,mutex,completion,interrupt
/*********************************************************************************** * * spinlock,semaphore,at...
534 0
862
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载