系統(tǒng)之家 - 系統(tǒng)光盤下載網(wǎng)站!

當(dāng)前位置:系統(tǒng)之家 > 系統(tǒng)教程 > 淺析固定U盤盤符的原理

淺析固定U盤盤符的原理

時(shí)間:2014-07-16 17:35:00 作者:咕嚕嚕 來源:系統(tǒng)之家 1. 掃描二維碼隨時(shí)看資訊 2. 請(qǐng)使用手機(jī)瀏覽器訪問: https://m.xitongzhijia.net/xtjc/20140716/24068.html 手機(jī)查看 評(píng)論

  研究固定U盤盤符從哪里開始?從注冊(cè)表來研究是最好的。為什么要從注冊(cè)表來研究磁盤與盤符?很簡單,操作注冊(cè)表速度最快,這不同于使用工具軟件從低層進(jìn)行查詢,其實(shí)PECMD的SHOW命令就是低層操作,操作復(fù)雜。其實(shí)注冊(cè)表記錄了一切,不再需要工具軟件去查找。

  一、都有什么類型的磁盤:

  這是首先要清楚的概念,分清了類別,我們才能去尋找相應(yīng)的盤符。不用多說,按物理類別來分可分為磁性盤(如硬盤、軟盤、磁帶機(jī)),壓縮盤(CD/DVD),閃存盤(U盤),ZIP盤(基本淘汰)等;從接口分類可分為IDE\SATA\SCSI\USB等類型;WINDOWS分類為本地磁盤(也叫固定磁盤fixed),可移動(dòng)磁盤(removable,如U盤,光盤,軟盤,ZIP盤等)兩大類。對(duì)于光盤,不管什么類型,什么接口,一律為CDROM/DVDROM,而本地磁盤,包括內(nèi)置硬盤,也包括USB移動(dòng)硬盤或量產(chǎn)為USB_HDD的閃存盤,可移動(dòng)盤,如我們買的U盤一般都是可移動(dòng)類型。

  二、注冊(cè)表中哪個(gè)位置準(zhǔn)確記錄了可擦寫磁盤的名稱、類型與數(shù)量?

  HKLM\SYSTEM\CurrentControlSet\Services\Disk\Enum

  這里的鍵名為0,1,2...即是磁盤在系統(tǒng)中的序號(hào),COUNT名為磁盤總數(shù)。如我的系統(tǒng)有相應(yīng)的值有IDE\,USBTOR\等,相應(yīng)的還有SCSI\,即代表了類型為IDE的硬盤,SCSI盤(固定或可移動(dòng)),USB盤(固定或可移動(dòng))。如果你去除了一個(gè)盤,那么,這里的鍵名馬上會(huì)減少一個(gè),假設(shè)有3個(gè)磁盤,你去除了中間的1,那么原來的2值也不會(huì)變成1,因此,在選擇硬盤號(hào)時(shí),要注意,雖然只有2個(gè)盤了,但也不是連續(xù)編號(hào)的。硬盤序號(hào),是選擇其對(duì)應(yīng)盤符的基礎(chǔ)。

  三、注冊(cè)表中哪個(gè)位置記錄了磁盤的裝入點(diǎn)mount point和盤符?

  HKLM\SYSTEM\MountedDevices

  這里的鍵名只有兩種,一種是以類似"\??\Volume{07c229a8-4b84-11de-8e8d-00e04c3e821b}"開頭的,{}中的部分即分區(qū)的ID,它是調(diào)整盤符的基礎(chǔ),是不變的。另一種就是我們的盤符形式的了,如A: C:等。仔細(xì)觀察會(huì)發(fā)現(xiàn)每種鍵名的鍵值都會(huì)在另外一種鍵的鍵值中找,這個(gè)值是唯一的,具體內(nèi)容是什么,請(qǐng)看接下來的圖形及最后的總結(jié)。這個(gè)位置最重要,一切盤符與類型信息都在這里,接下來會(huì)詳細(xì)解讀。

  四、如何找到一個(gè)本地磁盤(或固定磁盤)所包含的分區(qū)與盤符?

  一句話,通過disk signature,可以翻譯為硬盤標(biāo)記,這個(gè)東西是從WINNT 3.5開始WINDOWS為磁盤所建立的位于主啟動(dòng)分區(qū)MBR中的唯一標(biāo)記,一般沒有重復(fù)的。它是一個(gè)16進(jìn)制4 bytes的數(shù)值。比如disk signature 為A8 E1 B9 D2,則我們可以在HKLM\SYSTEM\MountedDevices項(xiàng)里面找值為D2 B9 E1 A8開頭的項(xiàng)名為\DosDevices\后面的盤符,通過這個(gè)值,還可以得到這樣就得到其對(duì)應(yīng)的開頭為\??\volume裝入點(diǎn),在這項(xiàng)下disk signature是反序的。那么,我們?nèi)绾蔚玫絛isk signature呢?通過搜索A8E1B9D2,會(huì)找到這樣一個(gè)項(xiàng):HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\9\DiskController\0\DiskPeripheral\0(不同的電腦,上述項(xiàng)中紅色的數(shù)字可能不同),項(xiàng)下有一個(gè)名為Identifier的值為"00c72b95-A8E1B9D2-A",如果系統(tǒng)只有一塊硬盤的話,那么,可以肯定,這個(gè)A8E1B9D2就是disk signature。反過來,也就是說,只要我們找到這個(gè)值,就可以找到其盤符及裝入點(diǎn)。那么,如果有幾塊FIXED 盤,到底哪個(gè)signature對(duì)應(yīng)哪塊盤呢?

  五、Disk signature與磁盤的對(duì)應(yīng):

  在正常的WINDOWS下面,這個(gè)問題好解決,在WinPE系統(tǒng)下就是不行。因此,WinPE系統(tǒng)下必須先得到disk signature或使用低層的diskpart命令,但一般的WinPE系統(tǒng)中都沒有為DISKPART安裝相應(yīng)的服務(wù)。在WINDOWS下這個(gè)設(shè)備類別項(xiàng)HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\STORAGE\Volume,所有的連接過的固定磁盤的signature都記錄在這里而且不能刪除,舉例:這是一個(gè)子項(xiàng),1&30a96598&0&SignatureA8E1B9D2Offset7E00LengthXXXXXXXX紅字部分是子signature,后面的Offset7E00是該磁盤的偏移值也是起始分區(qū)標(biāo)志,LengthXXXXXXXX是指分區(qū)的大小,當(dāng)然,這里我們不需要知道它。那么,到底如何確定signature所對(duì)應(yīng)的磁盤號(hào)啊,盤符順序是根據(jù)如上volume項(xiàng)下的分區(qū)的offset值來確定,分區(qū)從前至后,offset值從小到大,因此,盤符分區(qū)offset值的順序,是決定盤符順序的依據(jù)。

  總結(jié)一下:WINDOWS下獲取一個(gè)固定磁盤盤符的方法:

  1、獲取磁盤signature

  在HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\9\DiskController\0\DiskPeripheral\0(不同的電腦,上述項(xiàng)中紅色的數(shù)字可能不同),項(xiàng)下有一個(gè)名為Identifier的鍵,找到兩個(gè)"-"中間的部分即為disk signature值,如"00c72b95-A8E1B9D2-A"。

  注:signature也可以通過mfbfix軟件或windows自帶的diskpart獲得.

  2、根據(jù)signature找到對(duì)應(yīng)的磁盤序號(hào)

  根據(jù)signature,找到這里HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\STORAGE\Volume\1&30a96598&0&SignatureA8E1B9D2Offset7E00LengthXXXXXXXX,根據(jù)offset值從小到大的順序來確定盤符的順序!

  3、根據(jù)signature獲取盤符

  將signature反序排列,在HKLM\SYSTEM\MountedDevices項(xiàng)里面找值為以反序排列數(shù)字開頭的項(xiàng)名為\DosDevices\后面的盤符和相應(yīng)的裝入點(diǎn)。這里就有一個(gè)問題,假設(shè)一個(gè)盤有3個(gè)分區(qū),對(duì)應(yīng)3個(gè)盤符,如何確定其盤符順序?請(qǐng)看-

  六、固定磁盤盤符的順序:

  根據(jù)磁盤分區(qū)的offset值從小到大排序,即可得到正確的盤符順序。在HKLM\SYSTEM\MountedDevices項(xiàng)下將offset值反序即可得到對(duì)應(yīng)分區(qū)的ID值,同時(shí)也就獲得了該分區(qū)的盤符。說到這里固定磁盤的盤符獲得方法說完了,再說說如何獲得可移動(dòng)磁盤的盤符吧。

  七、獲取可移動(dòng)盤盤符:

  1、正向獲取

  由HKLM\SYSTEM\CurrentControlSet\Services\Disk\Enum,USBTOR\開始的值“\”最后的部分,如USBSTOR\Disk&Ven_Yan&Prod_Do&Rev_1.00\6&99c7d70&0,由紅色字部分,在這里HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR\Disk&Ven_Yan&Prod_Do&Rev_1.00\6&99c7d70&0找到名為ParenIdPrefix的值,如7&cfa80fe&0。這里7&cfa80fe&0,就是我們要的,根據(jù)它,我們就能找到盤符。OK,將其轉(zhuǎn)換為16進(jìn)制,再在HKLM\SYSTEM\MountedDevices找這個(gè)包含16進(jìn)制的值的鍵,OK,盤符和裝入點(diǎn)都找到了。當(dāng)然,這里我僅舉了U盤的情況,其實(shí)光盤也一樣的,請(qǐng)自行查找。

  2、反向獲取

  雙擊HKLM\SYSTEM\MountedDevices項(xiàng)里,值以5c003f003f005c00開始的行,先說說它是什么?雙擊一下鍵名,你會(huì)發(fā)現(xiàn)原來它是哈哈發(fā)現(xiàn)了什么,原來它對(duì)應(yīng)的字符就是“\.?.?.\.”,里面還有什么,有CDROM字樣,有REMOVABLE字樣,有FLOPPY字樣,見下圖:

  這就是我們要的磁盤類型啊,我們?nèi)讉(gè)相應(yīng)的16進(jìn)制的數(shù)就夠了,怎樣,盤符和類型都得到了吧,簡單吧。如下所示:

  if /i !tpcode! equ 00470045004E set flpdrv=!flpdrv! %%a

  if /i !tpcode! equ 004300640052 set dvddrv=!dvddrv! %%a

  if /i !tpcode! equ 00520065006D set remdrv=!remdrv! %%a

  上面第一行,如果存在G.E.N,則是軟盤;第二行,如果存在C.d.R,則是光盤;第三行,如果存在R.e.M,則是U盤。

  要注意的是,對(duì)于可移動(dòng)U盤,在VISTA下是以5f003f00(十進(jìn)制為"_.?.")開始的,這是U盤的唯一標(biāo)志。至此主要的東西都說完了,要想調(diào)整盤符,還有必要的東西要說:

  八、獲取所有盤符:

  在WINDOWS下,fsutil和wmic命令都可以,但因前者XP和VISTA下的不一樣,轉(zhuǎn)換有點(diǎn)麻煩,因此使用了后者,所有盤符,不論是虛擬還是非虛擬的,都可以得到。

  在WinPE下,如果使用wmic是不行的,因?yàn)闆]有wmi服務(wù),順序說一下wmic是個(gè)強(qiáng)大的命令行工具,可以查詢修改有關(guān)電腦的幾乎所有信息,硬件信息,軟件信息,磁盤信息都可以。

  那怎么辦呢?注冊(cè)表給我們提供了,在這里:HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\這里全是盤符。說到這兒,有人會(huì)問,為什么WINDOWS下不這樣做啊,嘿嘿,不一樣啊,WINDOWS下記載了所有曾經(jīng)出現(xiàn)過的盤符,不管現(xiàn)在有沒有,但WinPE不一樣,剛啟動(dòng)的PE,注冊(cè)表所記載的所有盤符都是存在的。

  九、獲取有裝入點(diǎn)的盤符:

  也有人說了,為什么不從HKLM\SYSTEM\MountedDevices獲得?這里不可信的,因此所有插過的磁盤的盤符和裝入點(diǎn)都記載在這里了,什么可信?mountvol,這個(gè)家伙的除了獲取裝入點(diǎn),還可以更改盤符,正是我們所需要的。

  十、獲取沒有有裝入點(diǎn)的盤符(虛擬盤符):

  想到了嗎?八-九=十。需要強(qiáng)烈注意的是,這里所批的虛擬盤符,是指一切沒有裝載點(diǎn)的盤符,差不多所有的虛擬軟件虛擬出的盤符都沒有裝入點(diǎn),如SUBST, NET USE, IMDISK, RAMDISK以及虛擬光驅(qū)等等,但有一個(gè)虛擬光驅(qū)軟件例外,就是DAEMON TOOLS。它有裝載點(diǎn),這也應(yīng)該能更改盤符,但請(qǐng)有條件者測試。

  十一、USB固定磁盤的盤符也是通過disk signature一步步獲取的嗎?

  這個(gè),即排除了所有的可移動(dòng)盤和內(nèi)置硬盤的盤符,剩余的就是USB固定磁盤的盤符,再根據(jù)反向signature,即HKLM\SYSTEM\MountedDevices里開頭8個(gè)字符是一樣的就是同一個(gè)磁盤的來判斷,非常的簡單,在此要感謝cn-dos的HAT,是他給出了同類情況批處理的最簡單的語句。這里也涉及一個(gè)盤符順序的問題,我們可以不用像硬盤那樣通過offset值來獲取,為什么呢?因?yàn)閁SB硬盤,只要你一插上,WINDOWS給分區(qū)的盤符都是連續(xù)的,在注冊(cè)表中volume id值也是連續(xù)分布的。

  以上便是我們今天要學(xué)習(xí)的固定U盤盤符原理的相關(guān)知識(shí),看了這么多你了解了多少?對(duì)于這方面有興趣的朋友不妨多次研究本文內(nèi)容,也許可以從中找到一些意想不到的發(fā)現(xiàn)。

發(fā)表評(píng)論

0

沒有更多評(píng)論了

評(píng)論就這些咯,讓大家也知道你的獨(dú)特見解

立即評(píng)論

以上留言僅代表用戶個(gè)人觀點(diǎn),不代表系統(tǒng)之家立場

其他版本軟件

人氣教程排行

U盤系統(tǒng)推薦

官方交流群 軟件收錄