过期罐头电脑论坛-win7、win10雨人系统下载

过期罐头电脑论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
雨人系统 过期罐头 视频编辑软件 电脑维修 win7系统下载 win10系统下载
查看: 650|回复: 0
收起左侧

[知识技巧] 深入分析固定U盘盘符原理

[复制链接]
发表于 2012-12-18 22:15:41 | 显示全部楼层 |阅读模式
发贴请勿包含网站外链(直接下载地址和网盘除外),屡犯者将封禁ID、网址永久屏蔽,www.gqgtpc.com感谢支持!
为什么要从注册表来研究磁盘与盘符?很简单,操作注册表速度最快,这不同于使用工具软件从低层进行查询,其实老九PECMD的SHOW命令就是低层操作,操作复杂。其实注册表记录了一切,不再需要工具软件去查找。

一、都有什么类型的磁盘:
  这是首先要清楚的概念,分清了类别,我们才能去寻找相应的盘符。不用多说,按物理类别来分可分为磁性盘(如硬盘、软盘、磁带机),压缩盘(CD/DVD),闪存盘(U盘),ZIP盘(基本淘汰)等;从接口分类可分为IDE\SATA\SCSI\USB等类型;WINDOWS分类为本地磁盘(也叫固定磁盘fixed),可移动磁盘(removable,如U盘,光盘,软盘,ZIP盘等)两大类。对于光盘,不管什么类型,什么接口,一律为CDROM/DVDROM,而本地磁盘,包括内置硬盘,也包括USB移动硬盘或量产为USB_HDD的闪存盘,可移动盘,如我们买的U盘一般都是可移动类型。

二、注册表中哪个位置准确记录了可擦写磁盘的名称、类型与数量?
  HKLM\SYSTEM\CurrentControlSet\Services\Disk\Enum
  这里的键名为0,1,2...即是磁盘在系统中的序号,COUNT名为磁盘总数。如我的系统有相应的值有IDE\,USBTOR\等,相应的还有SCSI\,即代表了类型为IDE的硬盘,SCSI盘(固定或可移动),USB盘(固定或可移动)。如果你去除了一个盘,那么,这里的键名马上会减少一个,假设有3个磁盘,你去除了中间的1,那么原来的2值也不会变成1,因此,在选择硬盘号时,要注意,虽然只有2个盘了,但也不是连续编号的。硬盘序号,是选择其对应盘符的基础。

三、注册表中哪个位置记录了磁盘的装入点mount point和盘符?
  HKLM\SYSTEM\MountedDevices
  这里的键名只有两种,一种是以类似"\??\Volume{07c229a8-4b84-11de-8e8d-00e04c3e821b}"开头的,{}中的部分即分区的ID,它是调整盘符的基础,是不变的。另一种就是我们的盘符形式的了,如A: C:等。仔细观察会发现每种键名的键值都会在另外一种键的键值中找,这个值是唯一的,具体内容是什么,请看接下来的图形及最后的总结。这个位置最重要,一切盘符与类型信息都在这里,接下来会详细解读。

四、如何找到一个本地磁盘(或固定磁盘)所包含的分区与盘符?
  一句话,通过disk signature,可以翻译为硬盘标记,这个东西是从WINNT 3.5开始WINDOWS为磁盘所建立的位于主启动分区MBR中的唯一标记,一般没有重复的。它是一个16进制4 bytes的数值。比如disk signature 为A8 E1 B9 D2,则我们可以在HKLM\SYSTEM\MountedDevices项里面找值为D2 B9 E1 A8开头的项名为\DosDevices\后面的盘符,通过这个值,还可以得到这样就得到其对应的开头为\??\volume装入点,在这项下disk signature是反序的。那么,我们如何得到disk signature呢?通过搜索A8E1B9D2,会找到这样一个项:HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\9\DiskController\0\DiskPeripheral\0(不同的电脑,上述项中红色的数字可能不同),项下有一个名为Identifier的值为"00c72b95-A8E1B9D2-A",如果系统只有一块硬盘的话,那么,可以肯定,这个A8E1B9D2就是disk signature。反过来,也就是说,只要我们找到这个值,就可以找到其盘符及装入点。那么,如果有几块FIXED 盘,到底哪个signature对应哪块盘呢?

五、Disk signature与磁盘的对应:
  在正常的WINDOWS下面,这个问题好解决,在winpe系统下就是不行。因此,WinPE系统下必须先得到disk signature或使用低层的diskpart命令,但一般的WinPE系统中都没有为DISKPART安装相应的服务。在WINDOWS下这个设备类别项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\STORAGE\Volume,所有的连接过的固定磁盘的signature都记录在这里而且不能删除,举例:这是一个子项,1&30a96598&0&SignatureA8E1B9D2Offset7E00LengthXXXXXXXX红字部分是子signature,后面的Offset7E00是该磁盘的偏移值也是起始分区标志,LengthXXXXXXXX是指分区的大小,当然,这里我们不需要知道它。那么,到底如何确定signature所对应的磁盘号啊,盘符顺序是根据如上volume项下的分区的offset值来确定,分区从前至后,offset值从小到大,因此,盘符分区offset值的顺序,是决定盘符顺序的依据。

总结一下:WINDOWS下获取一个固定磁盘盘符的方法:
  1、获取磁盘signature
  在HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\9\DiskController\0\DiskPeripheral\0(不同的电脑,上述项中红色的数字可能不同),项下有一个名为Identifier的键,找到两个"-"中间的部分即为disk signature值,如"00c72b95-A8E1B9D2-A"。
  注:signature也可以通过mfbfix软件或windows自带的diskpart获得.
  2、根据signature找到对应的磁盘序号
  根据signature,找到这里HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\STORAGE\Volume\1&30a96598&0&SignatureA8E1B9D2Offset7E00LengthXXXXXXXX,根据offset值从小到大的顺序来确定盘符的顺序!
  3、根据signature获取盘符
  将signature反序排列,在HKLM\SYSTEM\MountedDevices项里面找值为以反序排列数字开头的项名为\DosDevices\后面的盘符和相应的装入点。这里就有一个问题,假设一个盘有3个分区,对应3个盘符,如何确定其盘符顺序?请看

六、固定磁盘盘符的顺序:
  根据磁盘分区的offset值从小到大排序,即可得到正确的盘符顺序。在HKLM\SYSTEM\MountedDevices项下将offset值反序即可得到对应分区的ID值,同时也就获得了该分区的盘符。说到这里固定磁盘的盘符获得方法说完了,再说说如何获得可移动磁盘的盘符吧。

七、获取可移动盘盘符:
  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,就是我们要的,根据它,我们就能找到盘符。OK,将其转换为16进制,再在HKLM\SYSTEM\MountedDevices找这个包含16进制的值的键,OK,盘符和装入点都找到了。当然,这里我仅举了U盘的情况,其实光盘也一样的,请自行查找。
  2、反向获取
  双击HKLM\SYSTEM\MountedDevices项里,值以5c003f003f005c00开始的行,先说说它是什么?双击一下键名,你会发现原来它是哈哈发现了什么,原来它对应的字符就是“\.?.?.\.”,里面还有什么,有CDROM字样,有REMOVABLE字样,有FLOPPY字样,见下图:



  这就是我们要的磁盘类型啊,我们取几个相应的16进制的数就够了,怎样,盘符和类型都得到了吧,简单吧。如下所示:

  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盘。
  要注意的是,对于可移动U盘,在VISTA下是以5f003f00(十进制为"_.?.")开始的,这是U盘的唯一标志。至此主要的东西都说完了,要想调整盘符,还有必要的东西要说:

八、获取所有盘符:
  在WINDOWS下,fsutil和wmic命令都可以,但因前者XP和VISTA下的不一样,转换有点麻烦,因此使用了后者,所有盘符,不论是虚拟还是非虚拟的,都可以得到。
  在WinPE下,如果使用wmic是不行的,因为没有wmi服务,顺序说一下wmic是个强大的命令行工具,可以查询修改有关电脑的几乎所有信息,硬件信息,软件信息,磁盘信息都可以。
  那怎么办呢?注册表给我们提供了,在这里:HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\这里全是盘符。说到这儿,有人会问,为什么WINDOWS下不这样做啊,嘿嘿,不一样啊,WINDOWS下记载了所有曾经出现过的盘符,不管现在有没有,但WinPE不一样,刚启动的PE,注册表所记载的所有盘符都是存在的。

九、获取有装入点的盘符:
  也有人说了,为什么不从HKLM\SYSTEM\MountedDevices获得?这里不可信的,因此所有插过的磁盘的盘符和装入点都记载在这里了,什么可信?mountvol,这个家伙的除了获取装入点,还可以更改盘符,正是我们所需要的。

十、获取没有有装入点的盘符(虚拟盘符):
  想到了吗?八-九=十。需要强烈注意的是,这里所批的虚拟盘符,是指一切没有装载点的盘符,差不多所有的虚拟软件虚拟出的盘符都没有装入点,如SUBST, NET USE, IMDISK, RAMDISK以及虚拟光驱等等,但有一个虚拟光驱软件例外,就是DAEMON TOOLS。它有装载点,这也应该能更改盘符,但请有条件者测试。

十一、USB固定磁盘的盘符也是通过disk signature一步步获取的吗?
  这个,即排除了所有的可移动盘和内置硬盘的盘符,剩余的就是USB固定磁盘的盘符,再根据反向signature,即HKLM\SYSTEM\MountedDevices里开头8个字符是一样的就是同一个磁盘的来判断,非常的简单,在此要感谢cn-dos的HAT,是他给出了同类情况批处理的最简单的语句。这里也涉及一个盘符顺序的问题,我们可以不用像硬盘那样通过offset值来获取,为什么呢?因为USB硬盘,只要你一插上,WINDOWS给分区的盘符都是连续的,在注册表中volume id值也是连续分布的。



楼主热帖
[windows xp系统下载] 【XP台式装机】QY系统 GhostXP SP
[系统应用经验技巧] 对齐4K的好处
[闲聊杂侃] 逼出来的坚强
[系统应用经验技巧] 虚拟内存不够是什么原因造成的
[闲聊杂侃] 处事22计
[系统应用经验技巧] 保存网页图片的八种方法
[闲聊杂侃] 在泰国看到的pol.ice哥,哥真是无语了!暴强
[闲聊杂侃] 西藏十大未解之谜
[闲聊杂侃] 让孩子知道的20个小故事
[u盘启动盘下载] 小技巧保护硬盘WinPE

您需要登录后才可以回帖 登录 | 注册

本版积分规则

win7 64位旗舰版下载|win10系统下载|win7旗舰版|联系我们|网站地图|

GMT+8, 2016-12-3 23:31 , Processed in 0.313422 second(s), 25 queries .

官方免责声明:本站内容来自网友和互联网.若侵犯到您的版权.请致信联系,我们将第一时间删除相关内容!

Powered by Discuz!

过期罐头电脑论坛

win7旗舰版_windows10

快速回复 返回顶部 返回列表