[WinAPI] API 5 [遍历驱动器并获取驱动器属性]
2014-03-06 22:05
337 查看
(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值,表示信息获取是否成功。
获取主机中所有的逻辑驱动器,以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值,表示信息获取是否成功。
/* 遍历驱动器并获取驱动器属性 */ #include<windows.h> #include<stdlib.h> #include<stdio.h> #define BUFSIZE 1024 BOOL GetDirverInfo(LPSTR szDrive); void main() { CHAR szLogicalDriveStrings[BUFSIZE]; PCHAR szDrive; ZeroMemory(szLogicalDriveStrings,BUFSIZE); //获取逻辑驱动器卷名 GetLogicalDriveStringsA(BUFSIZE-1,szLogicalDriveStrings); szDrive=(PCHAR)szLogicalDriveStrings; //循环处理每个卷 do { if(!GetDirverInfo(szDrive)) { printf("\nGet Volume Information Error: %d",GetLastError()); } szDrive+=(lstrlenA(szDrive)+1); } while(*szDrive!='\x00'); } /* *功能:获取驱动器的属性 *参数:指明获取驱动器的根路径,如C:\ *返回:BOOL是否成功 */ BOOL GetDirverInfo(LPSTR szDrive) { UINT uDriveType; DWORD dwVolumeSerialNumber; DWORD dwMaximumComponentLength; DWORD dwFileSystemFlags; CHAR szFileSystemNameBuffer[BUFSIZE]; CHAR szDirveName[MAX_PATH]; printf("\n%s\n",szDrive); uDriveType=GetDriveTypeA(szDrive); switch(uDriveType){ case DRIVE_UNKNOWN: printf("The drive type cannot be determind."); break; case DRIVE_NO_ROOT_DIR: printf("The root path is invalid,for example,no volume is mounted at the path."); break; case DRIVE_REMOVABLE: printf("The drive is a type that has removable media,for example,a floppy drive or removable hard disk."); break; case DRIVE_FIXED: printf("The drive is a type that cannot be removed,for example,a fixed hard drive."); break; case DRIVE_REMOTE: printf("The drive is a remote (network) drive."); break; case DRIVE_CDROM: printf("The drive is a CD-ROM drive."); break; case DRIVE_RAMDISK: printf("The drive is a RAM disk."); break; default: break; } if(!GetVolumeInformationA( szDrive, szDirveName, MAX_PATH, &dwVolumeSerialNumber, &dwMaximumComponentLength, &dwFileSystemFlags, szFileSystemNameBuffer, BUFSIZE )) { return false; } printf("\nVolume Serial Number is %u",dwVolumeSerialNumber); printf("\nMaximum Component Length is %u",dwMaximumComponentLength); printf("\nSystem Type is %s\n",szFileSystemNameBuffer); if(dwFileSystemFlags & FILE_VOLUME_QUOTAS) { printf("The file system supports disk quotas.\n"); } if(dwFileSystemFlags & FILE_CASE_SENSITIVE_SEARCH) { printf("The file system supports case-sensitive file names.\n"); } //you can use these value to get more information //FILE_CASE_PRESERVED_NAMES //FILE_CASE_SENSITIVE_SEARCH //FILE_FILE_COMPRESSION //FILE_NAMED_STREAMS //... return TRUE; }
相关文章推荐
- [WinAPI] API 5 [遍历驱动器并获取驱动器属性]
- C++ windows API获取驱动器根路径和属性(-)
- 基于visual c++之windows核心编程代码分析(23)遍历驱动器并获取驱动器属性
- 基于visual c++之windows核心编程代码分析(23)遍历驱动器并获取驱动器属性
- [WinAPI] API 14 [获取、设置文件属性和时间]
- Windows API 逐个逐个学MessageBox(5) 遍历驱动器并获取驱动器属性 GetLogicalDriveStrings、GetDriveTypeA
- [WinAPI] API 13 [遍历指定目录 打印文件和其他属性]
- Asp.Net 文件操作基类(读取,删除,批量拷贝,删除,写入,获取文件夹大小,文件属性,遍历目录)
- 自己写的处理文件的类,删除目录,复制目录,遍历目录,获取文件属性,点评一下啊
- Google Maps API一例错误处理 SCRIPT5007: 无法获取属性“firstChild”的值: 对象为 null 或未定义 main.js
- 对象属性的遍历(一)遍历对象基础的三个API
- java反射遍历实体类属性和类型,并赋值和获取值
- C#遍历系统所安装的打印机,使用WMI方式获取打印机的所有属性
- JEB2 script 中通过api获取指定类的TypeHierarchy以遍历其所有派生类
- SharePoint JS API 例子(一):获取Web的属性
- [WinAPI] API 8 [获取磁盘空间信息]
- js 获取函数的所有参数和遍历JavaScript某个对象所有的属性名称和值的方法
- Asp.Net 文件操作基类(读取,删除,批量拷贝,删除,写入,获取文件夹大小,文件属性,遍历目录)
- php反射API 获取属性/注释/方法 执行方法 实例
- 获取驱动器盘符和类型(Win32 API) (转载)