windows API 第 18篇 FindFirstVolume FindNextVolume
函数定义:
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的更多相关文章
- Windows API 第19篇 FindFirstVolumeMountPoint FindNextVolumeMountPoint
相关函数:HANDLE FindFirstVolumeMountPoint( ...
- Windows API 第六篇 GetLocalTime
GetLocalTime获取系统时间信息.函数原型:VOID WINAPI GetLocalTime( __out LPSYSTEMTIME lpSystemTime ); 先来看S ...
- windows API 第22篇 WTSGetActiveConsoleSessionId
函数原型:DWORD WTSGetActiveConsoleSessionId (VOID)先看一下原文介绍: The WTSGetActiveConsoleSessionId function re ...
- windows API 第13篇 MoveFileEx
上一篇介绍了MoveFile,这次分析MoveFileEx,它是MoveFile的扩展函数,功能还要更加强大些.先看定义: BOOL WINAPI MoveFileEx( _In_ LPCTS ...
- Windows API 第三篇
1.获得程序自身的路径: DWORD GetModuleFileName( HMODULE hModule, // handle to module LPTSTR lpFilename, // pat ...
- Windows API 第21篇 DeleteVolumeMountPoint 删除挂载点
函数原型:BOOL DeleteVolumeMountPoint( LPCTSTR lpszV ...
- Windows API 第20篇 SetVolumeMountPoint 设置卷挂载点参数错误
函数原型:BOOL SetVolumeMountPoint( IN LPCTSTR lpszVo ...
- Windows API 第20篇 GetVolumeNameForVolumeMountPoint
函数原型: BOOL GetVolumeNameForVolumeMountPoint( ...
- Windows API 第17篇 GetLogicalDriveStrings 获取本机所有逻辑驱动器,以根目录的形式表示
函数原型:DWORD GetLogicalDriveStrings( DWORD nBufferLength, // size of buffer ...
随机推荐
- android studio 一个项目如何打包多个apk
1.修改app的build.gradle文件 假设我们同一套代码编译2个app:demo1和demo2 android { ... productFlavors { // demo1 demo1 { ...
- MD5 AND JSON AND XML
MD5JSON.h #pragma once #include "include/json/json.h" #include "include/md5/md5.h&quo ...
- (转)H264--1--编码原理以及I帧B帧P帧 .
转:http://blog.csdn.net/yangzhongxuan/article/details/8003504 ---------------------- 前言 ------------- ...
- Linux课程---12、linux中内存指令(top命令的作用是什么)
Linux课程---12.linux中内存指令(top命令的作用是什么) 一.总结 一句话总结: top实时观察进程.内存和CPU情况 1.电脑出现反应慢情况,最先想到的是什么? 内存 2.linux ...
- QtCreator 生成动态库
在Windows平台上,QtCreator( MinGW4.9.2 )创建动态库,最终生成的文件是libHello.a.Hello.dll和hello.o这3个文件(假设在D:/Lib文件夹下面) 在 ...
- js文件操作之——导出Excel (js-xlsx)
前阵子跟server同学讨论一个Excel导出的需求,我说JS搞不定,需要server来做,被server同学强行打脸. 今天研究了下,尼玛,不光可以,还很强大了! 总结:经验是害人的,尤其是在发展迅 ...
- HTML中使用js的三种方式及优缺点介绍
1.内部js: 在直接在页面的<script></script>标签内写js代码 优点:相对于使用行内js,内部js代码较为集中,与页面结构的实现代码耦合度较低,比较便于维护 ...
- wdatapicker 时间选择器——例
效果: html: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...
- CDH spark2切换成anaconda3的问题
最近spark2有同事想用anaconda3做开发,原因是上面可以跑机器学习的库(服务器因为没外网pip装whl确实麻烦) 1.先在每台机器安装anaconda3 2.把用户的~/.bashrc配置进 ...
- 【JZOJ3362】【BZOJ3758】数数
description 神犇最近闲来无事,于是就思考哲学,研究数字之美.在神犇看来,如果一个数的各位能够被分成两个集合,而且这两个集合里的数的和相等,那么这个数就是优美的(具体原因就只有神犇才知道了) ...