函数定义:
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. php多维数组排序方案。按照姓名 首字符 等排序

    //定义一个学生数组   $students = array(     256=>array('name'=>'jon','grade'=>98.5),     2=>arra ...

  2. thinkphp 字段定义

    通常每个模型类是操作某个数据表,在大多数情况下,系统会自动获取当前数据表的字段信息. 系统会在模型首次实例化的时候自动获取数据表的字段信息(而且只需要一次,以后会永久缓存字段信息,除非设置不缓存或者删 ...

  3. csps模拟83最大异或和简单的括号序列旅行计划题解

    题面:https://www.cnblogs.com/Juve/articles/11733280.html 最大异或和: 简单博弈,小Q一定不会输,如果异或和为0,则平局,因为无论小Q如何拿,小T都 ...

  4. vue双向绑定的原理

    什么是双向数据绑定?Vue是一个MVVM框架,数据绑定简单来说,就是当数据发生变化时,相应的视图会进行更新,当视图更新时,数据也会跟着变化. 实现数据绑定的方式大致有以下几种: - 1.发布者-订阅者 ...

  5. iOS开发NSMutableArray数组越界处理

    #import "NSArray+CrashArray.h" #import <objc/runtime.h> @implementation NSObject (Un ...

  6. 海量数据解决思路之Hash算法

    海量数据解决思路之Hash算法   一.概述 本文将粗略讲述一下Hash算法的概念特性,里边会结合 分布式系统负载均衡 实例对Hash的一致性做深入探讨.另外,探讨一下Hash算法在海量数据处理方案中 ...

  7. PPM 信号解析

    PWM信号 PWM信号用于控制单个电调或者单个舵机脉冲宽度调制信号. 像华科尔DEVO 10遥控接收器(RX1002)就输出10路PWM,参看下图. 舵机(电调)上用到PWM信号种类很多,我们这里对常 ...

  8. CentOS中GDB提示Missing separate debuginfos解决办法

    安装debuginfo 修改文件 vi /etc/yum.repo.d/CentOS-Debuginfo.repo 修改enabled的值为1 使用debuginfo-install安装需要的文件

  9. python 对excel操作

    在python中,对excel表格读,写,追加数据,用以下三个模块:1.wlrd 读取excel表中的数据2.xlwt 创建一个全新的excel文件,然后对这个文件进行写入内容以及保存.3.xluti ...

  10. cv2 & PIL(pillow)显示图像

    = OpenCV和PIL中显示图像方式不一样,且支持的格式也不同 = cv在显示图像时是自定义的显示窗口,而PIL中显示是调用操作系统中的默认打开程序 如: import cv2 im = cv2.i ...