曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4975|回复: 0
打印 上一主题 下一主题

[文件与IO] FindFirstVolume()/FindNextVolume()/FindVolumeClose()

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2012-2-13 14:44:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
FindFirstVolume() 函数原型如下:
HANDLE WINAPI FindFirstVolume(
  __out  LPTSTR lpszVolumeName,
  __in   DWORD cchBufferLength
);
该函数用来查找主机中的第一个驱动器,并返回驱动器设备名,该名字存储在第 1 个参数 lpszVolumeName 表示的缓冲区中,第 2 个参数 cchBufferLength 指定了第 1 个参数所表示缓冲区的大小。返回的设备名的形式如:
\\?\Volume{GUID}
函数的返回值是卷搜索句柄,可作为 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 等文件系统组织结构的最高层。卷是存储设备(如硬盘)上由文件系统管理的一块区域,是在逻辑上相互隔离的存储单元。一个磁盘分区至少包含一个卷,当然卷也可以存在于多个磁盘分区上,仅存在于一个分区上的卷称为“简单卷“,存在于多个磁盘分区上的卷称为”多分区卷“或”跨区卷“。最为常见的情况是一个分区只包含 一个卷,一个卷只存在于一个分区上,所以往往会造成的混淆是卷等于分区。卷存在卷标,程序可以通过卷标访问卷。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-18 23:19 , Processed in 0.063456 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表