刪除與恢復指定卷標的盤符

    最近做畢設時遇到一個問題,之前的想法過於天真,要實現預定功能可能有點麻煩,要寫過濾驅動,但是驅動這東西,以前沒接觸過,也沒信心在短時間內搞出來,所以就像其它的辦法,後來想了想,只有換一種思路,想起之前想到的在資源管理器中將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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章