文章目录

  • GetLogicalDriveStrings
  • 函数功能:
  • 函数原型:
  • 第一个参数
  • 第二个参数
  • 返回值:
  • 代码实现
  • FindFirstVolume
  • 函数功能
  • 第一个参数
  • 第二个参数
  • 返回值
  • FindNextVolume
  • 函数功能
  • 第一个参数
  • 第二个参数
  • 第三个参数
  • 返回值

GetLogicalDriveStrings

 GetLogicalDriveStrings(BUFSIZE - 1, szLogicalDriveStrings);

函数功能:

获取一个字串,其中包含了当前所有逻辑驱动器的根驱动器路径。

函数原型:

DWORD GetLogicalDriveStrings(DWORD nBufferLength, // size of bufferLPTSTR lpBuffer // drive strings buffer );

第一个参数

DODOWRD cchBuffer,缓冲区的大小

第二个参数

LPTSTR lpszBuffer,用于装载逻辑驱动器名称的字串。每个名字都用一个NULL字符分隔,在最后一个名字后面用两个NULL表示中止(空中止) 例如a:\\0c:\\0d:\\0h:\\0\0
每一个名字所占三个字节,a:\ 三个字符,然后当printf遇到一个\0输入就截止了,所以要用while循环,利用最后一个名字后面为两个\0作为判断,停止输出,这样我们就能输完所有的名字。

lstrlen(szDrive)的结果为3,代表\0之前有三个字节,也就印证了上面我们的假设,但如果再+1跳过\0后,我们就能继续输出下一个名字了;但当我们遇到最后一个名字时,这个名字首地址+4之后遇到的就是\0了。

返回值:

函数执行成功…返回填充完毕的缓冲区字符的的个数…不是长度…charTCHAR

返回数目都是一样的…

一般是4的倍数…(形如C:\ 包括之后的一个空字符0)…

如果缓冲区不够大,则返回值大于nBufferLength

如果失败…函数返回0…若想获得更多的错误信息,请使用GetLastError函数

所输出这种 c:\ 叫做逻辑驱动器

代码实现

 CHAR szLogicalDriveStrings[BUFSIZE];ZeroMemory(szLogicalDriveStrings, BUFSIZE);//把这个字符串清零GetLogicalDriveStrings(BUFSIZE - 1, szLogicalDriveStrings);//第一个参数就是字符数组的大小(长度)PCHAR szDrive;szDrive = (PCHAR)szLogicalDriveStrings;printf("%d\n", lstrlen(szDrive));/* a:\\0c:\\0d:\\0h:\\0 \0     */do {printf("%s\n", szDrive);szDrive += (lstrlen(szDrive) + 1);} while (*szDrive != '\0');

上面那个用字幕表示的,叫做逻辑驱动器名 是简单的。。。
下面 这种名称叫做设备名 每个盘都有 这个格式很特殊 这是个完整的名称 是唯一的 特殊格式的。。。

FindFirstVolume

函数功能

查找主机中的第一个驱动器,返回驱动器设备名

第一个参数

lpszVolumeName:指向驱动器名的内存缓冲区。

第二个参数

cchBufferLength:参数 lpszVolumeName 所指向的缓冲区大小,以字节为单位。

返回值

驱动器查找句柄, 返回一个句柄,FindNextVolumeFindVolumeColse 的参数, 如果执行失败, 返回 NULL。

FindNextVolume

函数功能

查找主机中后继的逻辑驱动器

第一个参数

hFindVolume: FindFirstVolume 所返回的驱动器查找句柄。

第二个参数

lpszVolumeName:指向保存驱动器名的内存缓冲区

第三个参数

cchBufferLength:参数 lpszVolumeName 所指向的缓冲区大小,以字节为单位。

返回值

返回 BOOL 表示是否成功,如果失败说明已经查找完成所有逻辑驱动器。

TCHAR buf[BUFSIZE];HANDLE hVol;BOOL bFlag;hVol = FindFirstVolume(buf,BUFSIZE);if (hVol == INVALID_HANDLE_VALUE) {printf("%s\n", buf);return -1;}printf("%s\n", buf);while (FindNextVolume(hVol, buf, BUFSIZE)){printf("%s\n", buf);}bFlag = FindVolumeClose(hVol);


每个盘都有一个唯一的设备名

备注:
2021年坚持学写博客第7天(学习两个windows API) 寻梦SS

明日目标:
windows核心编程API函数

GetLogicalDriveStrings FindFirstVolume和FindNextVolume相关推荐

  1. FindFirstVolume系列函数遍历驱动器,获取驱动器信息

    什么是"卷"? 卷,又称为"逻辑驱动器",是 NTFS, FAT32 等文件系统组织结构的最高层.卷是存储设备(如硬盘)上由文件系统管理的一块区域,是在逻辑上相 ...

  2. WinApi学习笔记-获取电脑中磁盘信息

    #include <windows.h> #include <stdlib.h> #include <stdio.h>#define BUFSIZE 1024voi ...

  3. 获取硬盘和卷或分区相关信息(容量,ID,卷标名字等)

    1.枚举所有硬盘 这里主要借助了setup API,这些API主要是NT4.0之后提供的一些用于操作设备的API. 枚举所有硬盘借助了SetupDiGetClassDevs与SetupDiEnumDe ...

  4. GetLogicalDriveStringS获取驱动器根路径

    GetLogicalDriveStringS获取驱动器根路径 #include <windows.h> #include <stdlib.h> #include <std ...

  5. Windows API 逐个逐个学MessageBox(5) 遍历驱动器并获取驱动器属性 GetLogicalDriveStrings、GetDriveTypeA...

    首先还是贴代码 VC++ Code: /* *************************************<精通Windows API> * 示例代码* GetVolumeIn ...

  6. Windows API ——GetLogicalDriveStrings——获取逻辑驱动器

    1 TCHAR buffer[MAX_PATH]; 2 DWORD dwVal=::GetLogicalDriveStrings(MAX_PATH,buffer); 3 4 CString str; ...

  7. 《精通Windows API-函数、接口、编程实例》——第4章文件系统

    第4章文件系统 4.2 磁盘和驱动器管理 文件系统的基本概念: 包括磁盘分区,卷,目录,文件对象,文件句柄,文件映射 1.磁盘分区: 物理磁盘,逻辑磁盘 2.卷: 也称逻辑驱动器,是NTFS,FAT3 ...

  8. 对硬盘操作的API介绍以及应用测试

    磁盘和驱动器管理API GetLogicalDrivers       获取主机中所有的逻辑驱动器,以BitMap的形式返回. GetLogicalDriverString    获取主机中所有的逻辑 ...

  9. windows磁盘相关API实践说明

    原帖地址:http://www.cnblogs.com/matrix-r/p/3288886.html API的列表如下,网上找的,我觉得还是蛮详细的: 磁盘和驱动器管理API GetLogicalD ...

最新文章

  1. Linux命令基础6-mkdir命令
  2. 变了味的微信你还能用多久?
  3. C++ Primer 5th笔记(2)chapter 2变量和基本类型:constexpr 、auto、类型别名、decltype
  4. linux 虚拟机安装图形界面,linux 在虚拟机中安装图形界面
  5. linux c之用fputc和fgetc复制文件并且打印在终端
  6. linux输入法没有候选,fcitx中文输入法没有备选框
  7. 你以为PHP那么好自定义升级?
  8. 第一章:第三课 选择器-状态伪类选择器[四]
  9. 谨以此文献给才毕业1--5年的朋友。。
  10. Storm sql 简单测试
  11. 正宗eMule官方网站导航
  12. 汉语语言分析(2) - 短语
  13. vue调用手机浏览器打开pdf_在微信中调用外部浏览器实现文件下载之解决
  14. (内附独家PPT)李岩:CynosDB高可用系统介绍
  15. java计算机毕业设计南通大学福利发放管理系统源码+系统+数据库+lw文档+mybatis+运行部署
  16. Canvas制作RPG手机版游戏(一):
  17. 〖TensorFlow2.0笔记21〗自定义数据集(宝可精灵数据集)实现图像分类+补充:tf.where!
  18. 看京东和淘宝的地址薄设计----填写订单的场景下
  19. MSSQL2019+Linux7, The SQLServerAgent is not currently running, so it cannot be notified of this
  20. 在html5中flex布局详解,Flex布局详解(一)

热门文章

  1. 成功解决 shape = predictor(img, dets[0]) IndexError: Index out of range
  2. DL之DNN优化技术:自定义MultiLayerNet【5*100+ReLU】对MNIST数据集训练进而比较三种权重初始值(Xavier参数初始化、He参数初始化)性能差异
  3. TF之LSTM:利用基于顺序的LSTM回归算法对DIY数据集sin曲线(蓝虚)预测cos(红实)(TensorBoard可视化)
  4. 利用多项式特征生成与递归特征消除解决特征组合与特征选择问题
  5. qmake 之 CONFIG 与 QT 乱谈
  6. Arcface demo
  7. Python 中的 lstrip、rstrip、strip
  8. React的核心概念
  9. Java 中浮点数---------BigDecimal和double(初探)
  10. c/c++头文件函数一览表