(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 }
http://www.cnblogs.com/zjutlitao/p/3585432.html
[WinAPI] API 5 [遍历驱动器并获取驱动器属性]
原文:http://www.cnblogs.com/findumars/p/5180533.html