欢迎登陆真网站,您的到来是我们的荣幸。 登陆 注册 忘记密码? ☆设为首页 △加入收藏
欢迎加入真幸福QQ群
电脑知识: 基础知识 网络技术 操作系统 办公软件 电脑维修 电脑安全 windows7 windows8 windows10 服务器教程 平板电脑 视频播放教程 网络应用 互联网 工具软件 浏览器教程 QQ技巧 输入法教程 影视制作 YY教程 wps教程 word教程 Excel教程 PowerPoint
云南西双版纳特产小花糯玉米真空包装


关于使用Tablet PC的10大好处
高手将系统装在U盘的实用对策
Mac如何恢复已删除文件?
让U盘盘符消失的绝妙方法
电脑时间区域的时间怎么样通过命令设置时间区域
Word2013中兼容模式如何转换?
浅析U盘的隐藏分区
关于U盘防止静电的一些小知识
什么是Tablet PC,Tablet PC有什么功能呢?
妙用Jumplist Launcher 超级右键工具
浅析固定U盘盘符的原理
【 来源:网络 】【 点击:1 】 【 发布时间:2017_03_03 08:59:59 】

   一、都有什么类型的磁盘:

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

  二、注册表中哪个位置准确记录了可擦写磁盘的名称、类型与数量?

  HKLMSYSTEMCurrentControlSetServicesDiskEnum

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

  三、注册表中哪个位置记录了磁盘的装入点mount point和盘符?

  HKLMSYSTEMMountedDevices

  这里的键名只有两种,一种是以类似"??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,则我们可以在HKLMSYSTEMMountedDevices项里面找值为D2 B9 E1 A8开头的项名为DosDevices后面的盘符,通过这个值,还可以得到这样就得到其对应的开头为??volume装入点,在这项下disk signature是反序的。那么,我们如何得到disk signature呢?通过搜索A8E1B9D2,会找到这样一个项:HKEY_LOCAL_MACHINEHARDWAREDESCRIPTIONSystemMultifunctionAdapter9DiskControllerDiskPeripheral(不同的电脑,上述项中红色的数字可能不同),项下有一个名为Identifier的值为"00c72b95-A8E1B9D2-A",如果系统只有一块硬盘的话,那么,可以肯定,这个A8E1B9D2就是disk signature。反过来,也就是说,只要我们找到这个值,就可以找到其盘符及装入点。那么,如果有几块FIXED 盘,到底哪个signature对应哪块盘呢?

  五、Disk signature与磁盘的对应:

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

  总结一下:WINDOWS下获取一个固定磁盘盘符的方法:

  1、获取磁盘signature

  在HKEY_LOCAL_MACHINEHARDWAREDESCRIPTIONSystemMultifunctionAdapter9DiskControllerDiskPeripheral(不同的电脑,上述项中红色的数字可能不同),项下有一个名为Identifier的键,找到两个"-"中间的部分即为disk signature值,如"00c72b95-A8E1B9D2-A"。

  注:signature也可以通过mfbfix软件或windows自带的diskpart获得.

  2、根据signature找到对应的磁盘序号

  根据signature,找到这里HKEY_LOCAL_MACHINESYSTEMCurrentControlSetEnum

STORAGEVolume1&30a96598&0&SignatureA8E1B9D2Offset7E00LengthXXXXXXXX,根据offset值从小到大的顺序来确定盘符的顺序!

  3、根据signature获取盘符

  将signature反序排列,在HKLMSYSTEMMountedDevices项里面找值为以反序排列数字开头的项名为DosDevices后面的盘符和相应的装入点。这里就有一个问题,假设一个盘有3个分区,对应3个盘符,如何确定其盘符顺序?请看-

  六、固定磁盘盘符的顺序:

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

  七、获取可移动盘盘符:

  1、正向获取

  由HKLMSYSTEMCurrentControlSetServicesDiskEnum,USBTOR开始的值“”最后的部分,如USBSTORDisk&Ven_Yan&Prod_Do&Rev_1.006&99c7d70&0,由红色字部分,在这里HKLMSYSTEMCurrentControlSetEnumUSBSTORDisk&Ven_Yan&Prod_Do&Rev_1.006&99c7d70&0找到名为ParenIdPrefix的值,如7&cfa80fe&0。这里7&cfa80fe&0,就是我们要的,根据它,我们就能找到盘符。OK,将其转换为16进制,再在HKLMSYSTEMMountedDevices找这个包含16进制的值的键,OK,盘符和装入点都找到了。当然,这里我仅举了U盘的情况,其实光盘也一样的,请自行查找。

  2、反向获取

  双击HKLMSYSTEMMountedDevices项里,值以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是个强大的命令行工具,可以查询修改有关电脑的几乎所有信息,硬件信息,软件信息,磁盘信息都可以。

  那怎么办呢?注册表给我们提供了,在这里:HKCUSoftwareMicrosoftWindowsCurrentVersionExplorerMountPoints2这里全是盘符。说到这儿,有人会问,为什么WINDOWS下不这样做啊,嘿嘿,不一样啊,WINDOWS下记载了所有曾经出现过的盘符,不管现在有没有,但WinPE不一样,刚启动的PE,注册表所记载的所有盘符都是存在的。

  九、获取有装入点的盘符:

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

  十、获取没有有装入点的盘符(虚拟盘符):

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

  十一、USB固定磁盘的盘符也是通过disk signature一步步获取的吗?

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

本网站由川南居提供技术支持,fkzxf版权所有 浙ICP备12031891号
淳安分站 淳安分站