删除与恢复指定卷标的盘符
来源:互联网 发布:mac u盘文件不显示 编辑:程序博客网 时间:2024/05/18 01:25
最近做毕设时遇到一个问题,之前的想法过于天真,要实现预定功能可能有点麻烦,要写过滤驱动,但是驱动这东西,以前没接触过,也没信心在短时间内搞出来,所以就像其它的办法,后来想了想,只有换一种思路,想起之前想到的在资源管理器中将U盘的那个图标隐藏,当时没怎么深入思考,后来在网友的提示下,换了一种思路,将U盘的盘符暂时删除,要用的时候在将其恢复,于是就照这个思路做下去,但是怎么做呢?
Google了一下,发现前辈们对此已有研究,很是欣慰,根据网友的方法把这个问题解决了,代码如下:
这个函数有三个参数:
第一个参数是驱动器卷标,如"C:/";
第二个参数是指向一个DOS设备名的字符串,它有着特殊的命名方式,叫做Universal Naming Convention (UNC) 命名,命名规则为/Device/xxx,其中xxx代表设备的编号(个人理解),有磁盘与光驱等等之分,磁盘(包括移动硬盘,U盘)一般为HarddiskVolumex,x代表你在磁盘中的编号,如我的C盘的设备名是“/Device/HarddiskVolume1”,具体可参见MSDN:http://msdn.microsoft.com/en-us/library/aa365247(v=VS.85).aspx#maxpath
第三个参数是隐藏标志,就不多说了。
函数的具体用法如下:
需要注意的是,在恢复盘符的时候,需要用到驱动器的设备名,所以在隐藏之前,我们利用QueryDosDevice函数将设备名保存到DosPath中,需要特别注意的是,这个函数中的盘符不需要加反斜杠,详情请参见MSDN:http://msdn.microsoft.com/en-us/library/aa365461(VS.85).aspx
这样我们就实现对指定驱动器的隐藏了,在命令行模式下也无法访问,找不到指定路径,不过这是指标不治本的,只要在磁盘管理器中为其重新分配盘符即可恢复访问。
还有另外一种方法,不过这只是一个障眼法,就是利用Windows一度未公开的SHChangeNotify函数来欺骗系统,具体用法如下:
这个函数用于向系统发生文件变化通知,加入我们不想让D盘显示,只需要通知系统这个磁盘已经被“删除”了,但是只要重新刷新下,磁盘又显示了,这也正是我说它是一个障眼法的原因,呵呵
主要参考资料:
1. http://www.cnitblog.com/wangk/archive/2006/01/10/6106.html
2. http://topic.csdn.net/u/20100819/09/002a1f13-0dfc-466f-9f61-73f4b7f684ee.html
3. http://msdn.microsoft.com/en-us/library/aa363904(v=VS.85).aspx
- 删除与恢复指定卷标的盘符
- 删除与恢复xp_cmdshell
- svn 删除与恢复
- Windows 7 光盘卷标的解析?
- AIX 删除逻辑卷后如何恢复文件系统
- 内标的创建修改删除
- xp_cmdshell的删除与恢复
- 删除unbuntu面板与恢复
- git 文件删除与恢复
- 对MySQL进行逻辑卷备份与恢复
- windows下,Python中获取本地磁盘卷标的方法
- ubuntu gnome 删除面板上图标的方法
- PHP删除数组中指定下标的元素
- Ntfs 分区的硬盘卷删除了权限重新恢复后"拒绝访问"![解决办法]
- 应用DiskGenius恢复误删除卷(硬盘分区)后的硬盘分区和数据
- 删除卷与分页文件(虚拟内存文件)
- docker rm 命令 删除容器与数据卷
- 删除与恢复扩展存储过程
- 如何降低android应用程序的耗电量
- android之后台线程(UI与线程交互)
- 表达式求值
- php中输出js语句
- 黑鹰VIP破解教程和天草破解教程的内容整体整理
- 删除与恢复指定卷标的盘符
- Base64编码介绍及基于Java语言实现
- 啊啊
- 避免创建重复的对象
- 2D游戏鼠标选取物体
- Oracle分页SQL
- hibernate3下hbm2ddl和hbm2java的配置
- 从GREENPLUM集群中去除某个SEGMENT
- 博客第一篇,读了一些文章,感受颇多,需要开始程序员支路