删除与恢复指定卷标的盘符

    最近做毕设时遇到一个问题,之前的想法过于天真,要实现预定功能可能有点麻烦,要写过滤驱动,但是驱动这东西,以前没接触过,也没信心在短时间内搞出来,所以就像其它的办法,后来想了想,只有换一种思路,想起之前想到的在资源管理器中将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

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值