日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

固定U盘盘符原理

發(fā)布時間:2023/12/14 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 固定U盘盘符原理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

此次更新了固定U盤盤符原理部分。
====
內(nèi)置硬盤盤符順序更新,修正錯誤部分。
盤符調(diào)整批處理在這里下載:http://bbs.wuyou.com/viewthread.php?tid=132985&extra=page%3D1
====
  寫點東西,把這階段的研究內(nèi)容記錄下來,同時也給研究相關(guān)內(nèi)容的同志提供參考,免得走彎路。

  先說幾句實話,在網(wǎng)上我所搜索到的有用的東西,基本都是外國鬼子搞的,不得不佩服他們,在技術(shù)內(nèi)容探討上,外國人非常的深入,而且論壇沒有垃圾回帖,這和我們這里是截然不同的。說差距,主要是在原始基礎(chǔ)創(chuàng)新層面。我搞的那個調(diào)整盤符的批處理,只有MSFNJACLAZ(他也是MSFN,BOOT-LAND,911CD的版主)同我討論的最深入。
不多說了,進(jìn)入正題。

  為什么要從注冊表來研究磁盤與盤符?很簡單,操作注冊表速度最快,這不同于使用工具軟件從低層進(jìn)行查詢,其實老九PECMDSHOW命令就是低層操作,操作復(fù)雜,因為我看了123MM的代碼。

  在做這個批處理前,我堅信,注冊表記錄了一切,不再需要工具軟件去查找,事實就是這樣。

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

二、注冊表中哪個位置準(zhǔn)確記錄了可擦寫磁盤的名稱、類型與數(shù)量?
HKLM\SYSTEM\CurrentControlSet\Services\Disk\Enum
這里面的鍵名為0,1,2...即是磁盤在系統(tǒng)中的序號,COUNT名為磁盤總數(shù)。如我的系統(tǒng)有相應(yīng)的值有IDE\USBTOR\等待,相應(yīng)的還有SCSI\,即代表了類型為IDE的硬盤,SCSI盤(固定或可移動),USB盤(固定或可移動)。

  如果你去除了一個盤,那么,這里的鍵名馬上會減少一個,假設(shè)有3個磁盤,你去除了中間的1,那么原來的2值也不會變成1,因此,在選擇硬盤號時,要注意,雖然只有2個盤了,但也不是連續(xù)編號的。

  硬盤序號,是選擇其對應(yīng)盤符的基礎(chǔ)。

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

四、如何找到一個本地磁盤(或固定磁盤)所包含的分區(qū)與盤符?
  一句話,通過disk signature,可以翻譯為硬盤標(biāo)記,這個東西是從WINNT 3.5開始WINDOWS為磁盤所建立的位于主啟動分區(qū)MBR中的唯一標(biāo)記,一般沒有重復(fù)的。它是一個16進(jìn)制4 bytes的數(shù)值。

  比如disk signature A8 E1 B9 D2,則我們可以在HKLM\SYSTEM\MountedDevices項里面找值為D2 B9 E1 A8開頭的項名為\DosDevices\后面的盤符,通過這個值,還可以得到這樣就得到其對應(yīng)的開頭為\??\volume裝入點,在這項下disk signature是反序的。

  那么,我們?nèi)绾蔚玫?/span>disk signature呢?

  通過搜索A8E1B9D2,會找到這樣一個項:
HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\9\DiskController\0\DiskPeripheral\0
(不同的電腦,上述項中紅色的數(shù)字可能不同),項下有一個名為Identifier的值為"00c72b95-A8E1B9D2-A",如果系統(tǒng)只有一塊硬盤的話,那么,可以肯定,這個A8E1B9D2就是disksignature。反過來,也就是說,只要我們找到這個值,就可以找到其盤符及裝入點。

  那么,如果有幾塊FIXED 盤,到底哪個signature對應(yīng)哪塊盤呢?

五、Disk signature與磁盤的對應(yīng)
  在正常的WINDOWS下面,這個問題好解決,在PE下就是不行,因此PE下面必須先得到disk signature或使用低層的diskpart命令,但一般的PE都沒有為DISKPART安裝相應(yīng)的服務(wù)。

WINDOWS下,注意這個設(shè)備類別項HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\STORAGE\Volume,所有的連接過的固定磁盤的signature都記錄在這里而且不能刪除,舉例:這是一個子項,1&30a96598&0&SignatureA8E1B9D2Offset7E00LengthXXXXXXXX
紅字部分是子signature,后面的Offset7E00是該磁盤的偏移值也是起始分區(qū)標(biāo)志,LengthXXXXXXXX是指分區(qū)的大小,當(dāng)然,這里我們不需要知道它。那么,到底如何確定signature所對應(yīng)的磁盤號啊,盤符順序是根據(jù)如上volume項下的分區(qū)的offset值來確定,分區(qū)從前至后,offset值從小到大,因此,盤符分區(qū)offset值的順序,是決定盤符順序的依據(jù)。

? ?? ?明白了嗎?

  總結(jié)一下,WINDOWS下獲取一個固定磁盤盤符的方法:
1. 獲取磁盤signature
  在HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\9\DiskController\0\DiskPeripheral\0(不同的電腦,上述項中紅色的數(shù)字可能不同),項下有一個名為Identifier的鍵,找到兩個"-"中間的部分即為disk signature值,如"00c72b95-A8E1B9D2-A"
? ?? ?注:signature也可以通過mfbfix軟件或windows自帶的diskpart獲得,具體用法見本人的批處理源代碼。

2. 根據(jù)signature找到對應(yīng)的磁盤序號
  根據(jù)signature,找到這里HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\STORAGE\Volume\1&30a96598&0&SignatureA8E1B9D2Offset7E00LengthXXXXXXXX
? ?根據(jù)offset值從小到大的順序來確定盤符的順序!

3. 根據(jù)signature獲取盤符
  將signature反序排列,HKLM\SYSTEM\MountedDevices項里面找值為以反序排列數(shù)字開頭的項名為\DosDevices\后面的盤符和相應(yīng)的裝入點。

  這里就有一個問題,假設(shè)一個盤有3個分區(qū),對應(yīng)3個盤符,如何確定其盤符順序?請看-

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

七、獲取可移動盤盤符
1. 正向獲取
  由HKLM\SYSTEM\CurrentControlSet\Services\Disk\EnumUSBTOR\開始的值“\”最后的部分,如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找這個包含16進(jìn)制的值的鍵,OK,盤符和裝入點都找到了。
JACLAZ就是這么做,哈哈,他的16進(jìn)制轉(zhuǎn)換批處理,好像沒有CN-DOSHAT的強。
  當(dāng)然,這里我僅舉了U盤的情況,其實光盤也一樣的,請讀者自行查找。
2.反向獲取
  這是我的做法,一下子就可以得到U盤、光盤和軟盤的盤符。
  雙擊HKLM\SYSTEM\MountedDevices項里,值以5c003f003f005c00開始的行,先說說它是什么?雙擊一下鍵名,你會發(fā)現(xiàn)原來它是哈哈發(fā)現(xiàn)了什么,原來它對應(yīng)的字符就是“\.?.?.\.”,里面還有什么,有CDROM字樣,有REMOVABLE字樣,有FLOPPY字樣,見下圖1
1 可移動盤符鍵值示例

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

QUOTE:


? ?? ?if /i !tpcode! equ 00470045004Eset 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盤。

  要注意的是,對于可移動U盤,在VISTA下是以5f003f00(十進(jìn)制為"_.?.")開始的,這是U盤的唯一標(biāo)志。

  至此主要的東西都說完了,要想調(diào)整盤符,還有必要的東西要說:

八、獲取所有盤符
  在WINDOWS下,fsutilwmic命令都可以,但因前者XPVISTA下的不一樣,轉(zhuǎn)換有點麻煩,因此使用了后者,所有盤符,不論是虛擬還是非虛擬的,都可以得到。

PE下,如果使用wmic是不行的,因為沒有wmi服務(wù),順序說一下wmic是個強大的命令行工具,可以查詢修改有關(guān)電腦的幾乎所有信息,硬件信息,軟件信息,磁盤信息都可以,但這不是我們要討論的,JACLAZ在搞。

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

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

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

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

十二、說一說固定盤符的原理
wxb在這里http://bbs.wuyou.com/viewthread.php?tid=130120&extra=page%3D1公布了固定U盤和移動硬盤盤符的方法,我們來分析一下其原理,用他的話是這樣說的:

QUOTE:


每個U盤都應(yīng)該對應(yīng)唯一的一個設(shè)備模型,這個設(shè)備模型對應(yīng)唯一的設(shè)備范例ID,把設(shè)備范例ID和你的U盤盤符對應(yīng)起來了。



  這里的設(shè)備范例ID,確切的說,是HKLM\SYSTEM\MountedDevices里的鍵值,為什么是不變的呢?這個固定盤符的方法有不足之處嗎?

  我們先從U盤的鍵值還說吧,如圖1

  這個值分為3部分,即類型描述部分,是固定的,紅色框中特征部分,最近證實,本人分析的正確的,此紅色部分是系統(tǒng)根據(jù)U盤的VID&PID所綜合獲取的,(獲取原理已經(jīng)由中國高手root60931在這兒:http://bbs.driverdevelop.com/htm_data/16/0508/96099.html揭示了)只要U盤的這些字串不變,則這個特征部分就不變,還有一個就是DeviceClassID,在WINDOWS下,這個值是固定的。這樣3部分加起來也是固定的,因此,不管在什么WIN系統(tǒng)下,其盤符都可以固定。它的不足之處就在于,如果UVERDERPRODUDCERVID&PID發(fā)生變化或U盤容量發(fā)生變化,則很有可能會使鍵值發(fā)生變化,指定盤符將不在發(fā)生作用。其實大家再來看這3部分的組合,這不就是這個注冊表項里面的紅色部分嗎:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}\##?#STORAGE#RemovableMedia#7&55f17fc&0&RM#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b},這樣,我們對這個值有了深入的了解。

  同理,我們是不是也可以固定光盤的盤符嗎?是的一樣的。

  對于固定磁盤的盤符,如USB硬盤或USB HDD盤,情況更簡單,看下圖2
2 固定磁盤第一分區(qū)鍵值

  共分2部分,第1部分為反向disk signature,第2部分是第1分區(qū)標(biāo)志7e00,這兩部分都是固定的,加起來也是固定的。同上這第兩部分的加分不也是這個項:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}\##?#STORAGE#Volume#1&30a96598&0&Signature5E0A5E0AOffset7E00Length273898200#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}的紅色字部分嗎?由此可見,對于PE在第一分區(qū)的盤符,也是可以固定的。同理,其它分區(qū)的盤符也是可以固定的(有什么意義呢?),但是這個限制條件就多了,為什么說多了呢?因為,只要你一改變磁盤分區(qū),其大小就要變化,這樣OFFSET值就要變,這一變,鍵值就變了,你就固定不了盤符了,如下圖3
3 磁盤其它分區(qū)鍵值

  同理,這也是這項紅色字的反向內(nèi)容:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}\##?#STORAGE#Volume#1&30a96598&0&Signature5E0A5E0AOffset2738A7E00Length3EC8D0400#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}

  綜上,再推而廣之,我們是不是可以固定所有盤的盤符呢?是的,可以的。

  但這樣的方法有一個前提,這個盤符不能是系統(tǒng)盤符,RAMXP可以,因為其盤符就是X,如果是USB盤或光盤上直接運行的非RAMPE,這個系統(tǒng)盤符,你是動不了的,這也是這種固定盤符方法的缺陷。

最后,再總結(jié)一下HKLM\SYSTEM\MountedDevices里的內(nèi)容:
1. 這里面只存在形如\??\Volume{xxxxx...}字樣的鍵和\DosDevices\X:字樣的鍵,后者為盤符項,前者為盤符的裝入點,二者的鍵值是一樣的,因此,只要我們有了一個鍵名,就能得到另外一個鍵名。

2. 鍵值存在三種,一種是以5c003fcc開頭的(VISTA下以U盤以5f003f00開頭),這代表著是可移動設(shè)備,包括(U盤、光盤、軟盤[也應(yīng)該包括SCSI移動盤]);另一種是以反向disk signature值開頭的,代表著固定設(shè)備,其中固定設(shè)備的第1分區(qū)所對應(yīng)的鍵值,在反向8disk signature后面都是接著007e00000000,這是第一分區(qū)的特征值,對于非第一分區(qū)外的,除了8個反向字符后面的值,其反向值,是該分區(qū)的offset,即表示分區(qū)大小;第三種,就是其它了,這個東西好像沒有規(guī)律,如果RAMXP所虛擬出的X盤,在我的電腦里顯示光盤,但確是可寫的。在注冊表里只有\DosDevices\X:鍵和值,卻沒有對應(yīng)的裝入點,MOUNTVOL也顯示不出其裝入點,這可能是RAMXP固有的磁盤類型。此外,穿云鶴的USBCDROM也有類似的情況。

  如發(fā)現(xiàn)本文錯誤或不足之處,請及時告訴俺。

總結(jié)

以上是生活随笔為你收集整理的固定U盘盘符原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。