Windows下USB磁盘开发系列一:枚举系统中U盘的盘符
个时候我们需要区分系统磁盘中,哪些是U盘,这样我们在访问的时候可以区别对待。具体方法如下:
1,调用GetLogicalDrives()返回系统盘符标记位
API GetLogicalDrives()将返回一个DWORD类型的标记值,将其转换成二进制之后,为1的位标识对应的盘符在系统中存在。比如返回值为:11100,则表示盘符C:D:E:在系统中存在,因为最低位对应盘符A。
2,调用GetDriveType()返回磁盘属性
如果该API返回DRIVE_REMOVABLE,则认为该盘符对应的设备是USB设备(U盘或者移动硬盘)
具体代码如下:
枚举系统USB磁盘函数
int enum_usb_disk(char usb_paths[], int cnt)
{
int usb_disk_cnt = ; char disk_path[] = {};
char device_path[] = {};
DWORD all_disk = GetLogicalDrives();
printf("System volume flag:0x%X\n", all_disk); int i = ;
DWORD bytes_returned = ;
while (all_disk && usb_disk_cnt < cnt)
{
if ((all_disk & 0x1) == )
{
sprintf_s(disk_path, "%c:", 'A'+i);
sprintf_s(device_path, "\\\\.\\%s", disk_path);
if (GetDriveTypeA(disk_path) == DRIVE_REMOVABLE)
{
usb_paths[usb_disk_cnt++] = 'A' + i;
}
}
all_disk = all_disk >> ;
i++;
} return usb_disk_cnt;
}
调用函数
int _tmain(int argc, _TCHAR* argv[])
{
char usb_volume[] = {};
int usb_cnt = enum_usb_disk(usb_volume, );
printf("System has %d usb disk, their volume are:", usb_cnt);
for (int i = ; i < usb_cnt; i++)
{
printf("%c: ", usb_volume[i]);
} return ;
}
运行结果:
Windows下USB磁盘开发系列一:枚举系统中U盘的盘符的更多相关文章
- Windows下USB磁盘开发系列二:枚举系统中所有USB设备
上篇 <Windows下USB磁盘开发系列一:枚举系统中U盘的盘符>介绍了很简单的获取系统U盘盘符的办法,现在介绍下如何枚举系统中所有USB设备(不光是U盘). 主要调用的API如下: 1 ...
- Windows下USB磁盘开发系列三:枚举系统中U盘、并获取其设备信息
前面我们介绍了枚举系统中的U盘盘符(见<Windows下USB磁盘开发系列一:枚举系统中U盘的盘符>).以及获取USB设备的信息(见<Windows下USB磁盘开发系列二:枚举系统中 ...
- windows下VC界面 DIY系列1----写给想要写界面的C++程序猿的话
非常早就想写关于C++ UI开发的一系列博文,博客专栏刚审核通过,就立即開始刷博文,不能辜负自己的一番热血,我并非写界面的高手,仅仅想通过写博文提高我自己的技术积累,也顺便帮助大家解决界面开发的瓶颈. ...
- [转载]在Windows下搭建Android开发环境
http://jingyan.baidu.com/article/bea41d437a41b6b4c51be6c1.html 在Windows下搭建Android开发环境 | 浏览:30780 | 更 ...
- Windows下C,C++开发环境搭建指南
Windows下C,C++开发环境搭建指南 前情提要 基于近一段时间很多网友发邮件反馈,说一些项目编译出现问题,诸如此类的情况. 就觉得很有必要写一篇C,C++开发环境的小指南,统一回复. 1.君欲善 ...
- windows下读取磁盘扇区数据
在Windows下,磁盘可以看做是一个文件,其文件名为\\\\.\\PhysicalDriveX,其中X表示磁盘的编号,例如\\\\.\\PhysicalDrive0表示的是第0号磁盘,如果需要读取一 ...
- Windows下搭建Git开发环境
Windows下搭建Git开发环境主要有以下三种方法: 1,VS,vs2013和vs2015中已经集成了git插件了 2,msysGit+TortoiseGit 3,msysGit+SourceTre ...
- [转]windows下安装Object-C开发环境
本文转自:http://hi.baidu.com/jeremylai/item/f40b9116cb3c5d582b3e22f5 在Windows下搭建Objective C开发环境,需要到GNUst ...
- [转]MonkeyRunner在Windows下的Eclipse开发环境搭建步骤(兼解决网上Jython配置出错的问题)
MonkeyRunner在Windows下的Eclipse开发环境搭建步骤(兼解决网上Jython配置出错的问题) 网上有一篇shangdong_chu网友写的文章介绍如何在Eclipse上配置M ...
随机推荐
- 用命令打开本地tomcat服务器
1.点击开始菜单,搜索cmd,默认第一个结果是cmd.exe, 鼠标右键用管理员权限打开(win7及以上版本系统) 启动命令是net start tomcat8 (我电脑是tomcat8,如果是tom ...
- STM32应用实例七:与宇电设备实现AI-BUS通讯
宇电的设备使用基于RS-485的自定义协议,协议本身比较简单,只有2条指令: 读:地址代号+52H(82) +要读的参数代号+0+0+校验码 写:地址代号+43H(67)+要写的参数代号+写入数低字节 ...
- python 全栈开发,Day102(支付宝支付)
昨日内容回顾 1. django请求生命周期? - 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者po ...
- 读取web.config和app.config配置文件
app.config: <add key="Password" value="123456"/> C#: string TQpwd ...
- C/S权限系统(一)
父窗体的代码: 扩展Enter键相当于Tab键的思路: 1.创建 窗体的父类2.在父类中重写Form中的ProcessCmdKey方法,在相关控件上按回车键相当于按了Tab 键3.让窗体继承新建的窗体 ...
- 《必须知道.NET》3.OO之美
3.2 依赖的哲学 3.2.1 本质诠释 "不要调用我们,我们会调用你" 3.2.2 什么是依赖,什么是抽象 "耦合是不可避免的" (1)什么是依赖和耦合 依赖 ...
- \x 开头编码的数据解码成中文
在python里,直接decode('utf-8')即可 >>> "\xE5\x85\x84\xE5\xBC\x9F\xE9\x9A\xBE\xE5\xBD\x93 \xE ...
- Asp.Net Core 2.0 项目实战(4)ADO.NET操作数据库封装、 EF Core操作及实例
Asp.Net Core 2.0 项目实战(1) NCMVC开源下载了 Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架 Asp.Ne ...
- BZOJ1143 [CTSC2008]祭祀river 二分图匹配 最小链覆盖
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1143 题意概括 给出一个有向图.求最小链覆盖. 题解 首先说两个概念: 链:一条链是一些点的集合, ...
- Adobe Acrobat Pro DC破解
下载amtemu 点击 在AMT Emulator界面,下拉选择Adobe Acrobat DC; 然后点击右下角Install安装破解补丁. 点击Install后在弹出窗口中手动找到并选择软件安装目 ...