【Windows API】获取卷标、卷名

news2025/2/10 22:58:31

 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;
}

输出

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/864504.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DAY19

题目一 空间尝试模型 一个样本做行一个样本做列 范围尝试模型 以....做分隔 dp[i][j] 为以i为左界限 以j为右界限 求这个范围内的计算值(不对 是方法数) 这& | ^ 都是双目运算符 观察一下规律 整体字符数量一定为奇数(包括运算符和数字) 对应到数组中 数组的位一定是偶数…

CosmosAI欧盟数字超算新时代战略合作签约仪式在伦敦举行

据英国权威媒体获悉,由分布式超算网络服务商CosmosAI主办的欧盟数字超算新时代战略合作签约仪式将于8月14日英国伦敦历史悠久的莱福士OWO酒店隆重举办,该酒店曾作为爱德华七世国王加冕仪式以及丘吉尔二战办公室享誉盛名。 本次活动CosmosAI基金会联合创…

海思ss928部署手写数字识别模型

大致流程--------------------------------------------------------------------------------------------------------------------- 模型转换---------------------------------------------------------------------------------------------------- 1:准备MNI…

QPainter - 八卦时钟

QPainter - 八卦时钟 上一篇我们在画时钟的时候,已经把基本的钟表指针和刻度都绘制过了 想要完成八卦时钟,就要绘制这个里面的八卦了。 先上个图: 有人和我说八卦不能转 再来一张图: 背景的绘制 我们需要删除之前所绘制的白色…

攻防世界-web-getit

1. 题目描述 菜鸡发现这个程序偷偷摸摸在自己的机器上搞事情,它决定一探究竟。 获取到文件后,先查看文件信息 说明是一个可执行程序,没啥思路,先逆向 2. 思路分析 逆向后,找到main函数,查看逻辑 通过逆…

智安网络|网络安全:危机下的创新与合作

随着信息技术的迅猛发展和互联网的普及,我们进入了一个高度网络化的社会。网络在提供便利和连接的同时,也带来了许多安全隐患和挑战。 一、网络安全的危险 **1.数据泄露和隐私侵犯:**网络上的个人和机构数据存在遭受泄露和盗取的风险&#…

C#,入门教程(42)——各种括号“()[]{}<>“的用法总结

(成对的)括号是各种编程语言的核心要素。很多年前就想着写这样一篇专门关于各种括号的技术文章。一直未动笔,因为总想着偷懒,但凡有一个人写了,就无需我动手了。可惜的是,等了十多年,也没有出现…

集成接近和环境光传感器市场调查报告

集成接近和环境光传感器在单个传感器中集成接近和环境光感应功能。该传感器广泛应用于物联网 (IoT) 设备、消费电子产品和可穿戴设备,集成接近和环境光传感器可以自动调整屏幕亮度并根据接近情况打开/关闭屏幕,以降低设备功耗。集成接近和环境光传感器广…

【嵌入式学习笔记】嵌入式入门4——独立看门狗IWDG

1.IWDG简介 IWDG的全称:Independent watchdog,即独立看门狗,IWDG的本能:产生系统复位信号的计数器IWDG的特性:递减的计数器,时钟由独立的RC振荡器提供(可在待机和停止模式下运行) 看…

16bit、8 通道、500kSPS、 SAR 型 ADC——MS5188N

MS5188N 是 8 通道、 16bit 、电荷再分配逐次逼近型模数 转换器,采用单电源供电。 MS5188N 拥有多通道、低功耗数据采集系统所需的所有 组成部分,包括:无失码的真 16 位 SAR ADC ;用于将输入配 置为单端输入&#xff0…

水力发电厂测量装置配置选型及厂用电管理系统

NB/T 10861-2021《水力发电厂测量装置配置设计规范》对水电厂的测量装置配置做了详细要求和指导。测量装置是水力发电厂运行监测的重要环节,水电厂的测量主要分为电气量测量和非电量测量。电气测量指使用电的方式对电气实时参数进行测量,包括电流、电压、…

linux下实现生产者和消费者 pv操作

线程同步与线程安全 生产者和消费者特点图示理解编程实现测试结果 生产者和消费者 特点 1.解耦:因为多了一个缓冲区,所以生产者和消费者并不直接相互调用,这样生产者和消费者的代码发生变化,都不会对对方产生影响。这样其实就是把生产者和消…

使用 Gradio 构建生成式 AI 应用程序(一): 图片内容读取app

今天我们来学习DeepLearning.AI的在线课程:Building Generative AI Applications with Gradio,该课程主要讲述利用gradio来部署机器学习算法应用程序, 今天我们来学习第一课:Image captioning app,该课程主要讲述如何从图片中读取…

优秀项目团队最突出的5项重要特征

一个优秀的开发团队,对于软件项目而言,其重要性不言而喻。否则项目团队一盘散沙,直接影响项目准时保质保量地交付。一般从大家的认可度来说,优秀团队最突出的特征,主要集中在以下几个方面: 1、目标明确 优秀…

oracle连表查询in后边跟另一张表中的字符串字段

今天在做通过in进行连表查询的时候发现以下问题记录下 我的需求是A,B两张表连接查询,A中有一个FOOD_TYPES字段 存的值类型为1,2,3 B表中的字段是FOOD_TYPE 存的是单个数字字符串 我需要where b.food_type in a.food_types 但是无论怎么写都…

Live800:客服常用的6大提问技巧,帮助客服服务更高效

作为企业最前线的客服,提升服务质量是必须要做到的,而如何提升服务质量呢?其中一项关键点就是提问技巧。在客户沟通中,提问的方式和技巧直接影响着客户对企业服务的满意度。下面,本文将介绍客服常用的6大提问技巧&…

go语言的database/sql结合squirrel工具sql生成器完成数据库操作

database/sql database/sql是go语言内置数据库引擎,使用sql查询数据库,配置datasource后使用其数据库操作方法对数据库操作,如下: package mainimport ("database/sql""fmt"_ "github.com/Masterminds…

Android简单封装Matrix工具类

Android简单封装Matrix工具类 1.简介: Matrix 是一款微信研发并日常使用的应用性能接入框架,支持iOS, macOS和Android。 Matrix 通过接入各种性能监控方案,对性能监控项的异常数据进行采集和分析,输出相应的问题分析、定位与优化…

整数中1出现的次数(从1到n整数中1出现的次数)

解题思路1: 设定整数点(如1、10、100等等)作为位置点i(对应n的各位、十位、百位等等),分别对每个数位上有多少包含1的点进行分析。 第一步:对n进行分割,分为两部分:高位…

JavaWeb学习|JavaBean;MVC三层架构;Filter;Listener

1.JavaBean 实体类 JavaBean有特定的写法: 必须要有一个无参构造 属性必须私有化。 必须有对应的get/set方法 用来和数据库的字段做映射 ORM; ORM:对象关系映射 表--->类 字段-->属性 行记录---->对象 2.<jsp&#xff1a;useBean 标签 3. MVC三层架构 4. Filter …