[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 }
[WinAPI] API 5 [遍历驱动器并获取驱动器属性]相关推荐
- Windows API 逐个逐个学MessageBox(5) 遍历驱动器并获取驱动器属性 GetLogicalDriveStrings、GetDriveTypeA...
首先还是贴代码 VC++ Code: /* *************************************<精通Windows API> * 示例代码* GetVolumeIn ...
- FindFirstVolume系列函数遍历驱动器,获取驱动器信息
什么是"卷"? 卷,又称为"逻辑驱动器",是 NTFS, FAT32 等文件系统组织结构的最高层.卷是存储设备(如硬盘)上由文件系统管理的一块区域,是在逻辑上相 ...
- c# 获取路径的盘符_c#获取驱动器盘符
在编写某些Windows管理应用程序时,能够从自定义的驱动器选择列表框中进行选择无疑是非常专业的,使用Delphi或者C++的早期版本时我们都必须使用Win32所提供的许多关于获取磁盘信息的API函数 ...
- WindowsAPI 获取驱动器属性
@获取驱动器属性_WindowsAPI #GetDiveType API链接: link. 代码如下: BOOL GetDriverInfo(LPSTR szDrive) {printf(" ...
- GetLogicalDriveStringS获取驱动器根路径
GetLogicalDriveStringS获取驱动器根路径 #include <windows.h> #include <stdlib.h> #include <std ...
- API接口遍历越权获取个人信息
目录 漏洞描述 案例1 案例2 漏洞危害 漏洞修复 漏洞描述 程序通过调用api接口获取对应的数据信息,如果对参数校验不严格,则可能导致越权获取别的账户信息 案例1 在一次APP渗透测试中,登录账号后 ...
- igs无法分配驱动器映射表_利用VBA获取驱动器的信息
大家好,我们今日讲解"VBA信息获取与处理"教程中第十七个专题"文件及文件夹信息的获取及操作"的第三节"利用VBA获取文件的信息和属性",这 ...
- java微信开发API解析(二)-获取消息和回复消息
java微信开发API解析(二)-获取消息和回复消息 说明 * 本演示样例依据微信开发文档:http://mp.weixin.qq.com/wiki/home/index.html最新版(4/3/20 ...
- c语言删除文件 Windows,基于Windows API实现遍历所有文件并删除的方法
本文实例讲述了基于Windows API实现遍历所有文件并删除的方法.分享给大家供大家参考.具体分析如下: 最近一直在学windows API,弄了一些好玩的东西(有点恶作剧了,请大家谨慎使用)... ...
最新文章
- 用Flutter + Dart快速构建一款绝美移动App
- QT绘图控件QWT的安装及配置
- numpy meshgrid 和 mgrid 的两个简单实例和解析
- 《微软产品开发致胜策略》-5月22日微软CTO峰会主题演讲
- 开源纯C#工控网关+组态软件(八)表达式编译器
- ASP.NET MVC3 系列教程 - 部署你的WEB应用到IIS 6.0
- ubuntu18.04安装python3_在 Ubuntu 18.04 上安装 Python 3.7
- python圣诞树编写实例详解
- C#开发笔记,点点细微,处处真情,记录开发中的难言之隐
- op手机突然显示无服务器,op手机 云服务器
- wsdl接口调用请求消息xml_短网址生成 API 接口调用请求
- etcd工作原理和部署指南
- Asp.Net 之 枚举类型的下拉列表绑定
- 【C#】Newtonsoft.Json 常用方法总结
- JS简单实现图片上一张下一张操作
- 浅谈ARM Cortex-M0
- 产生伪随机数两种常用算法
- maya linux 安装教程视频,在Archlinux 安装Maya7.01
- Installation failed due to: ‘‘cmd package install-create -r -t --user current --full --dont-kill -t
- Windows登录多微信
热门文章
- python子进程通信_python执行子进程实现进程间通信的方法
- mysql.server 文件是什么_mysql的启动脚本mysql.server及示例配置文件
- 51单片机c语言运算符,51单片机表达式语句的用法解析
- 逆水寒服务器新消息,游戏新消息:逆水寒太火爆服务器爆满王思聪都挤不进去...
- python怎么读write_Python中怎么读写文件
- oracle rowid mysql_相当于Oracle的RowID在MySQL中
- 计算机内部使用什么方法技术,计算机内部使用什么技术
- 失败在大学生活中的三种功能
- 智能车竞赛技术报告 | 节能信标组 - 宿迁学院 - MAkkaPakka
- 2021年春季学期-信号与系统-第五次作业参考答案-第七小题