函数定义:
Retrieves the name of a volume on a computer. FindFirstVolume is used to begin scanning the volumes of a computer.

HANDLE WINAPI FindFirstVolume(
_Out_ LPTSTR lpszVolumeName,
_In_  DWORD  cchBufferLength
);
说明:
检索本机卷的名字,但这个名字是GUID(全局唯一标志符)路径的,可见卷的表示方法有好多种,不仅仅是我们平时所看到的C盘,D盘,
返回值:
成功返回一个有效的句柄,最后需要用FindVolumeClose函数关掉该句柄。失败返回INVALID_HANDLE_VALUE。 接着又一个函数:
BOOL WINAPI FindNextVolume(
_In_  HANDLE hFindVolume,
_Out_ LPTSTR lpszVolumeName,
_In_  DWORD  cchBufferLength
);
说明:
第一个参数就是用调用FindFirstVolume的返回句柄, 其它两个参数不多介绍了, 用这两个函数循环的遍历所有的可用卷。 下面写一个例子来输出这个GUID名称:
void main()

{

CHAR szVolume[MAX_PATH] = { 0 };

HANDLE hVolume = FindFirstVolumeA(szVolume,MAX_PATH);
if (INVALID_HANDLE_VALUE == hVolume)
return 0;
//string strVolume = szVolume;
printf("%s \n", szVolume);
while (FindNextVolumeA(hVolume, szVolume, MAX_PATH))
{
printf("%s \n", szVolume);
} FindVolumeClose(hVolume);//别忘了关闭句柄 }

我的输出结果是这样的:

分析:

可见这些也代表着卷标的唯一标志,我的笔记本上是有五个驱动器,分别是C盘,D盘,E盘,F盘和CD ROM光驱H。这样也证实了这一说法。

接下来我们用GetDriveType函数拿上面的返回值测试一下看正确不。

The GetDriveType function determines whether a disk drive is a removable, fixed, CD-ROM, RAM disk, or

network drive. //判断卷的类型

UINT GetDriveType(

LPCTSTR lpRootPathName // root directory

);

void main()

{

    UINT uGUIDType[5];
UINT uNameType[5];
int i = 0; CHAR szVolume[MAX_PATH] = { 0 };
HANDLE hVolume = FindFirstVolumeA(szVolume,MAX_PATH);
if (INVALID_HANDLE_VALUE == hVolume)
return 0; //string strVolume = szVolume;
//printf("%s \n", szVolume);
uGUIDType[i] = GetDriveTypeA(szVolume);
uNameType[i] = GetDriveTypeA("C:\\");
i++;
while (FindNextVolumeA(hVolume, szVolume, MAX_PATH))
{
//printf("%s \n", szVolume);
uGUIDType[i] = GetDriveTypeA(szVolume);
i++;
}
uNameType[1] = GetDriveTypeA("D:\\");
uNameType[2] = GetDriveTypeA("E:\\");
uNameType[3] = GetDriveTypeA("F:\\");
uNameType[4] = GetDriveTypeA("H:\\"); CHAR szResult[MAX_PATH] = { 0 };
sprintf_s(szResult, "uGUIDType:\t%d %d %d %d %d \nuNameType:\t%d %d %d %d %d\n", uGUIDType[0], uGUIDType[1], uGUIDType[2], uGUIDType[3], uGUIDType[4], uNameType[0], uNameType[1], uNameType[2], uNameType[3], uNameType[4]);
printf("%s", szResult); }

这次查看结果:

可知那些奇怪的字符 \\?\Volume{fe04a021-a8fc-11e4-824b-806e6f6e6963}\和"C:\\"是一样的。

而这些数字代表什么呢?查看MSDN可得:

#define DRIVE_UNKNOWN 0
#define DRIVE_NO_ROOT_DIR 1
#define DRIVE_REMOVABLE 2
#define DRIVE_FIXED 3
#define DRIVE_REMOTE 4
#define DRIVE_CDROM 5
#define DRIVE_RAMDISK 6

windows API 第 18篇 FindFirstVolume FindNextVolume的更多相关文章

  1. Windows API 第19篇 FindFirstVolumeMountPoint FindNextVolumeMountPoint

    相关函数:HANDLE FindFirstVolumeMountPoint(                                                               ...

  2. Windows API 第六篇 GetLocalTime

    GetLocalTime获取系统时间信息.函数原型:VOID   WINAPI  GetLocalTime(    __out LPSYSTEMTIME lpSystemTime    ); 先来看S ...

  3. windows API 第22篇 WTSGetActiveConsoleSessionId

    函数原型:DWORD WTSGetActiveConsoleSessionId (VOID)先看一下原文介绍: The WTSGetActiveConsoleSessionId function re ...

  4. windows API 第13篇 MoveFileEx

    上一篇介绍了MoveFile,这次分析MoveFileEx,它是MoveFile的扩展函数,功能还要更加强大些.先看定义: BOOL WINAPI MoveFileEx( _In_     LPCTS ...

  5. Windows API 第三篇

    1.获得程序自身的路径: DWORD GetModuleFileName( HMODULE hModule, // handle to module LPTSTR lpFilename, // pat ...

  6. Windows API 第21篇 DeleteVolumeMountPoint 删除挂载点

    函数原型:BOOL DeleteVolumeMountPoint(                                                      LPCTSTR lpszV ...

  7. Windows API 第20篇 SetVolumeMountPoint 设置卷挂载点参数错误

    函数原型:BOOL SetVolumeMountPoint(                                                   IN   LPCTSTR lpszVo ...

  8. Windows API 第20篇 GetVolumeNameForVolumeMountPoint

    函数原型: BOOL GetVolumeNameForVolumeMountPoint(                                                        ...

  9. Windows API 第17篇 GetLogicalDriveStrings 获取本机所有逻辑驱动器,以根目录的形式表示

    函数原型:DWORD GetLogicalDriveStrings(  DWORD nBufferLength,  // size of buffer                          ...

随机推荐

  1. canvas像素的操作

    ###在canvas中的像素操作 到目前为止,我们尚未深入了解Canvas画布真实像素的原理,事实上, 你可以直接通过ImageData对象操纵像素数据,直接读取或将数据数组写入该对象中 ###得到场 ...

  2. gevent实现并发

    #_author:来童星#date:2019/12/12import geventimport timedef func1(): print('\033[31;1mfun1 starting...\0 ...

  3. Windows color

    设置默认的控制台前景和背景颜色. COLOR [attr] attr        指定控制台输出的颜色属性. 颜色属性由两个十六进制数字指定 -- 第一个对应于背景,第二个对应于前景.每个数字可以为 ...

  4. QueryList 来做采集

    示例代码 先来感受一下使用 QueryList 来做采集是什么样子. 1 采集百度搜索结果列表的标题和链接.大理石平台价格 采集代码: $data = QueryList::get('https:// ...

  5. 服务器断过一次电之后,mysql启动不了了

    公司内部服务器,周末会直接拉闸断电,之前也没问题,但这次回来发现mysql启动不了了. service mysqld start 提示: Starting MySQL.The server quit ...

  6. MongoDB后台运行

    文章目录 命令方式(推荐) 命令行和配置文件方式 命令行: 配置文件: 命令方式(推荐) 如果想在后台运行,启动时只需添加 --fork函数即可. fork: 以守护进程的方式运行MongoDB. 指 ...

  7. Linux权限命令chmod

    一.Linux chmod命令修改文件和文件目录权限(默认情况下只有root用户才能使用).命令格式:chmod+修改内容+要修改的文件或者 目录 或者 chmod -R 修改内容 要修改的文件或者 ...

  8. 数据库连接JDBC

    #=======================mysql============================= #jdbc.driverClassName=com.mysql.jdbc.Driv ...

  9. vue项目打包后资源相对引用路径的和背景图片路径问题

    vue项目中若要使用相对路径来获得相应静态资源,需要修改以下内容来确保项目打包后能正常运行. 1.修改config => index.js => build => assetsPub ...

  10. Mybatis Resultmap 简化之超级父类

    我们在写 mybatis多表关联查询的时候 ,要配置  resultmap ,实在太麻烦.而这个超级父类 可以省去我们查询多表时的map public class SuperPojo extends ...