【Windows API】获取卷标、卷名

2023-11-08

 1、卷->卷标

使用FindFirstVolume()和FindNextVolume()函数体系,枚举系统所有卷(Volume)的例子,然后获取卷标、卷类型。这个方式可以枚举出没有驱动器号(卷标)的卷。

int TestMode1()
{
    HANDLE hVolume = INVALID_HANDLE_VALUE;
    TCHAR tszVolumeName[MAX_PATH] = {0};
    TCHAR tszVolumePath[MAX_PATH] = {0};
    BOOL bRet;

    DWORD dwError;
    DWORD dwCount;
    UINT nDriveType;

    //1、获取卷名称
    hVolume = FindFirstVolume(tszVolumeName, ARRAYSIZE(tszVolumeName));

    if (hVolume == INVALID_HANDLE_VALUE)
    {
        wprintf(_T("FindFirstVolume() failed, error code = %d"), GetLastError());
        return -1;
    }

    while (1)
    {
        //2、获取卷路径
        dwCount = ARRAYSIZE(tszVolumePath);
        bRet = GetVolumePathNamesForVolumeName(tszVolumeName, tszVolumePath, dwCount, &dwCount);

        if (!bRet)
        {
            dwError = GetLastError();
            wprintf(_T("GetVolumePathNamesForVolumeName() failed, error code = %d"), dwError);

            getchar();
            return -1;
        }

        //3、获取驱动器类型
        nDriveType = GetDriveType(tszVolumePath);

        wprintf(_T("Volume name: %s\r\n"), tszVolumeName);
        wprintf(_T("Volume path: %s\r\n"), tszVolumePath);
        wprintf(_T("Drive type: %d\r\n\r\n"), nDriveType);

        bRet = FindNextVolume(hVolume, tszVolumeName, ARRAYSIZE(tszVolumeName));

        if (!bRet)
        {
            dwError = GetLastError();

            if (dwError != ERROR_NO_MORE_FILES)
            {
                wprintf(_T("FindNextVolume() failed, error code = %d"), dwError);
                return -1;
            }

            break;
        }
    }

    wprintf(_T("Test 2 end!\r\n\r\n"));
    //getchar();

    return 0;
}

输入

 

2、卷标->卷名

通过卷标(驱动器号)获取卷名,需要使用GetVolumeNameForVolumeMountPoint()函数。

int TestMode2()
{
    TCHAR tszLogicDriveStrings[1024] = {0};
    LPCTSTR szDrive = NULL;
    TCHAR tszVolumeName[MAX_PATH];

    GetLogicalDriveStrings(sizeof(tszLogicDriveStrings) / sizeof(TCHAR) - 1, tszLogicDriveStrings);
    szDrive = (LPCTSTR)tszLogicDriveStrings;

    do
    {
        GetVolumeNameForVolumeMountPoint(szDrive, tszVolumeName, sizeof(tszVolumeName) / sizeof(TCHAR));
        wprintf(_T("Drive %s, Volume name: %s\r\n"), szDrive, tszVolumeName);
        szDrive += (lstrlen(szDrive) + 1);
    } while (*szDrive != _T('\x00'));

    wprintf(_T("\r\nTest 1 end!\r\n\r\n"));

    return 0;
}

输出

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Windows API】获取卷标、卷名 的相关文章

随机推荐

  • erp仓库管理系统,适合各种行业的仓库,有供应商管理 ,商品管理

    erp仓库管理系统 适合各种行业的仓库 有供应商管理 商品管理 客户管理 销售管理 收款管理 付款管理 销售明细管理 采购明细管理 多仓库调拨管理4110622654117171凤皇培训学校
  • 晶体(crystal、无源晶振)两端电容取值计算

    数字电路中往往会需要一个时钟源 常用的比如晶体振荡器 oscillator 有源晶振 晶体 crystal 无源晶振 等 一般晶体用的更多些 对于晶体来说 一般电路设计时会在晶体两端各接一个电容到地 如下图所示 上面电路中晶体两端的电容是用
  • D类功率放大器

    深度剖析D类功率放大 http DXdlgf 我们知道 功率放大器一般分为甲类 乙类 甲乙类 丙类 丁类 即D类 和戊类等多种工作方式 为了提高功率和效率 一般的方法是降低三极管的静态工作点及由甲类到乙类 甚至到丙类 甲类 乙类 甲乙类的工
  • cublasCgetrfBatched cublasCgetriBatched sample

    This example demonstrates how to use the CUBLAS library by scaling an array of floating point values on the device and c
  • Mysql第三章:存储引擎(MyISAM和Innodb)

    目录 1 什么是存储引擎 2 常用存储引擎 2 1 MyISAM特点 2 2 Innodb特征 2 2 1 Innodb优点 2 2 2 innoDB内存模型 3 MVCC多版本控制器 3 1 首先了解事务ACID 的实现 3 2 首先了解
  • Nginx的配置与部署及例子

    Nginx的配置与部署及例子 1 Nginx程序包 目前最新的开发版本时1 1 12 Linux Unix nginx 1 1 12 tar gz Windows nginx 1 1 12 zip 我们可以下载稳定版尝试 Linux Uni
  • UE4/UE5 使用Unreal Datasmith完全教程

    插件整理下载 点击下载 UE4 4 19 UE5 5 3 官方 入口 Datasmith支持导入Twinmotion Twinmotion教程汇总 2021 4 2 Datasmith安装到4 20 4 23版本 UE4 在4 20 23版
  • iis ajax json,IIS配置jquery ajax、 json,mp4文件支持

    11 条件加载Jquery 如果CDN没有下载到Jquery 则从本地读取 在MIME增加一个Json类型 在MIME增加一个配置如 添加 gt 文件扩展名为 JSON MIME类型为text json 也有将application x j
  • 深度学习的归一化方法

    目录 1 为什么使用 Normalization 2 BatchNorm vs LayerNorm 适用场景 工作原理 3 GroupNorm 本次介绍一下各种归一化方法 包括 BatchNorm LayerNorm InstanceNor
  • 使用albumentations库进行数据增强

    需要注意增强之后以字典键值的形式调用输出 且可以保证img gt的随机增强是一一对应一致的 import albumentations as albu tfrd albu Compose albu HorizontalFlip p 0 5
  • 关于SpringBoot中pom.xml中<plugin>报错

    报错部分代码
  • PTAWindows消息队列c++版——山东科技大学

    题目 消息队列是Windows系统的基础 对于每个进程 系统维护一个消息队列 如果在进程中有特定事件发生 如点击鼠标 文字改变等 系统将把这个消息加到队列当中 同时 如果队列不是空的 这一进程循环地从队列中按照优先级获取消息 请注意优先级值
  • [Tools] SecureCRT文件传输模式介绍

    如下图所示 SecureCRT有5种文件传输模式 1 ASCII 最快的传输模式 但只能传文本 2 Binary 只能传二进制文件 3 Xmodem 非常古老的传输协议速度较慢 但由于使用了CRC错误侦测方法 传输的准确率可高达99 6 4
  • PAT 1103 Integer Factorization

    题目的意思是给定n k p 求是否存在k个正整数 每个数的p次幂相加的结果等于n 有 输出k个数相加的结果最大的那个 如果有多个 输出序列从大到小排最大的那个 从左往右比较 若 i lt l a i
  • 查看端口占用情况(Windows环境)

    查看端口占用情况 1 打开命令窗口 以管理员身份运行 2 查询所有端口的占用情况 3 查看指定端口的占用情况 4 查看是哪个进程或者程序占用了相应的端口 5 解决端口占用问题 1 打开命令窗口 以管理员身份运行 window R组合键 输入
  • C++——RAII机制

    文章目录 我们知道 资源的使用一般经历三个步骤 a 获取资源 b 使用资源 c 销毁资源 资源的销毁往往是程序员经常忘记的一个环节 忘记销毁资源可能会造成内存泄露 怎么解决呢 RAII RAII Resource Acquisition I
  • Nginx配置错误

    漏洞概述 PHPUnit 是 PHP 程式语言中最常见的单元测试 unit testing 框架 通常phpunit使用composer非常流行的PHP依赖管理器进行部署 将会在当前目录创建一个vendor文件夹 phpunit生产环境中仍
  • Django 模型(model)

    目录 前言 一 Django ORM 什么是ORM ORM 解析过程 ORM 对应关系表 二 数据库配置 Django 如何使用 mysql 数据库 三 定义模型 创建 APP 四 定义模型类 数据库表名 关于主键 属性命名限制 字段类型
  • 二、【React拓展】懒加载 lazy

    文章目录 1 适用点 2 汇总 1 适用点 懒加载往往配合路由一起使用 此处修改的项目是 二 React Router5 路由的基本使用 中的项目 首先从react中引入lazy import lazy from react 修改引入路由组
  • 【Windows API】获取卷标、卷名

    1 卷 gt 卷标 使用FindFirstVolume 和FindNextVolume 函数体系 枚举系统所有卷 Volume 的例子 然后获取卷标 卷类型 这个方式可以枚举出没有驱动器号 卷标 的卷 int TestMode1 HANDL