FindFirstVolume() 函数原型如下:HANDLE WINAPI FindFirstVolume(
__out LPTSTR lpszVolumeName,
__in DWORD cchBufferLength
); 该函数用来查找主机中的第一个驱动器,并返回驱动器设备名,该名字存储在第 1 个参数 lpszVolumeName 表示的缓冲区中,第 2 个参数 cchBufferLength 指定了第 1 个参数所表示缓冲区的大小。返回的设备名的形式如:函数的返回值是卷搜索句柄,可作为 FindNextVolume() 函数的参数,以继续查找下一个驱动器的设备名,FindNextVolume() 函数原型如下:BOOL WINAPI FindNextVolume(
__in HANDLE hFindVolume,
__out LPTSTR lpszVolumeName,
__in DWORD cchBufferLength
); 该函数的第 1 个参数 hFindVolume 设置为 FindFirstVolume() 所返回的卷搜索句柄。
第 2 个参数是用来保存驱动器名的缓冲区。
第 3 个参数是缓冲区的大小。
函数执行成功返回非零值,失败则返回零值,也表示查找完所有的逻辑驱动器。
FindVolumeClose() 函数原型如下:BOOL WINAPI FindVolumeClose(
__in HANDLE hFindVolume
); 该函数关闭 FindFirstVolume() 所打开的卷遍历句柄。
测试代码:
[C++] 纯文本查看 复制代码 #include "stdafx.h"
#define BUFSIZE 1024
int _tmain(int argc, _TCHAR* argv[])
{
TCHAR buf[BUFSIZE];
HANDLE hVol;
BOOL bFlag;
ZeroMemory(buf, BUFSIZE);
hVol = FindFirstVolume(buf, BUFSIZE);
if (hVol == INVALID_HANDLE_VALUE) {
printf ("No volumes found!\n");
return (-1);
}
_tprintf (TEXT("%s\n"), buf);
while (FindNextVolume(hVol, buf, BUFSIZE)) {
_tprintf (TEXT("%s\n"), buf);
}
bFlag = FindVolumeClose(hVol);
return (bFlag);
}
运行输出:\\?\Volume{2736ce5f-3f2b-11e1-a584-806e6f6e6963}\
\\?\Volume{2736ce5e-3f2b-11e1-a584-806e6f6e6963}\
\\?\Volume{2736ce60-3f2b-11e1-a584-806e6f6e6963}\
\\?\Volume{8c40b2e2-3f3b-11e1-8ccb-6cf049ee76dc}\
\\?\Volume{2736ce63-3f2b-11e1-a584-806e6f6e6963}\
什么是“卷”?
卷,又称为“逻辑驱动器”,是 NTFS, FAT32 等文件系统组织结构的最高层。卷是存储设备(如硬盘)上由文件系统管理的一块区域,是在逻辑上相互隔离的存储单元。一个磁盘分区至少包含一个卷,当然卷也可以存在于多个磁盘分区上,仅存在于一个分区上的卷称为“简单卷“,存在于多个磁盘分区上的卷称为”多分区卷“或”跨区卷“。最为常见的情况是一个分区只包含 一个卷,一个卷只存在于一个分区上,所以往往会造成的混淆是卷等于分区。卷存在卷标,程序可以通过卷标访问卷。 |