无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
12
返回列表 发新帖
楼主: lxl1638
打印 上一主题 下一主题

多硬盘机子要自动整理盘符遇到的难题。

[复制链接]
31#
 楼主| 发表于 2011-2-18 19:45:35 | 只看该作者
原帖由 victor888 于 2011-2-18 18:49 发表
fujianabc说的思路很好。
如果能有软件来判断就更好了。


实际上你那个批处理是可以完成这任务的,就是将读取WinPE的注册表改为读取原硬盘系统的注册表。
回复

使用道具 举报

32#
发表于 2011-2-18 20:02:35 | 只看该作者
原帖由 lxl1638 于 2011-2-18 19:05 发表


按fujianabc的思路是可行的,但实现起来要做很多事,大体是这样:
1、读取硬盘数目,并读取各硬盘 MBR,从中找到disk signature(硬盘 disk signature 在 MBR 的后部)。
2、挂载原硬盘系统的注册表,从原系 ...

步骤不用这么多:
1. 挂载system并读取mounteddevices项
2. 从中找到dosdevice项,然后根据dosdevice的内容得到对应的GUID项
3. GUID可以直接用到mountvol命令中
回复

使用道具 举报

33#
 楼主| 发表于 2011-2-18 20:58:13 | 只看该作者
原帖由 fujianabc 于 2011-2-18 20:02 发表

步骤不用这么多:
1. 挂载system并读取mounteddevices项
2. 从中找到dosdevice项,然后根据dosdevice的内容得到对应的GUID项
3. GUID可以直接用到mountvol命令中


好象这种方法不行,同一分区在XP系统和WinPE系统在dosdevice中对应的GUID是不同的,
从底层原理上来说,这个GUID与挂载分区无关,挂载分区的底层原理是:
1、执行 DefineDosDevice,将一个分区挂上(这步完成后已经分配到了盘符,该分区中的文件已经可以访问,GUID应该是这步完成后产生的);
2、执行 GetVolumeNameForVolumeMountPoint,由函数的第三个参数返回取得这个卷的GUID;
3、最后执行 SetVolumeMountPoint 完成分区挂载的整个过程,执行这步好象会将GUID写入注册表。

本人发现,无需执行第2、第3步也可挂载分区。
附件是XP、WinPE系统注册表 HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices 下的内容,发现两个系统的GUID项不同。



[ 本帖最后由 lxl1638 于 2011-2-19 11:27 编辑 ]

MountedDevices.rar

1.36 KB, 下载次数: 26, 下载积分: 无忧币 -2

回复

使用道具 举报

34#
发表于 2011-2-18 22:06:18 | 只看该作者
原帖由 lxl1638 于 2011-2-18 20:58 发表
本人发现,无需执行第2、第3步也可挂载分区


直接通过dosdevice的中磁盘签名和offset就能挂载并分配盘符?
那应该处理起来很简单了
回复

使用道具 举报

35#
发表于 2011-2-19 01:13:07 | 只看该作者
在网上下载的PE大部分都已IDE接口的盘为先,即:IDE-0、IDE-1、SATA-0、SATA-1,最近我下载一个PE发现与前者正好相反,即:SATA-0、SATA-1、IDE-0、IDE-1,而Windows系统默认的情况下,都是以BIOS设定第一优先启动硬盘为C盘,我想这就造成PE与Win系统不统一的原因吧。
回复

使用道具 举报

36#
 楼主| 发表于 2011-2-19 11:42:06 | 只看该作者
原帖由 fujianabc 于 2011-2-18 22:06 发表


直接通过dosdevice的中磁盘签名和offset就能挂载并分配盘符?
那应该处理起来很简单了


原理就是这样,但并非很简单。

可以读取原系统的磁盘签名和分区offset,确定这个分区在当前WinPE系统中的硬盘Index和分区Index来挂载分配盘符,
执行 DefineDosDevice 挂载分区时必须知道硬盘序号和分区序号,DefineDosDevice 挂载分区时,其中一个参数是:
"\Device\HarddiskX\PartitionY" 这样的形式(XY分别为硬盘ID和分区ID),所以关键是由原系统注册表的分区offset
与工具读取到的分区offset对比,来确定分区序号,因此,简单单纯的批处理可能无法完成这功能了,因为原系统中的
一些分区可能是没有分配到盘符的,如某些机子的备份隐藏分区、用户有意的隐藏分区或用户有意隐藏的驱动器卷,
这些分区不一定是第一分区,也不一定是最后分区,可以是其中任一分区。

[ 本帖最后由 lxl1638 于 2011-2-19 11:52 编辑 ]
回复

使用道具 举报

37#
发表于 2011-2-19 11:47:12 | 只看该作者
不是只要确定那个硬盘先处理就好了么?
回复

使用道具 举报

38#
 楼主| 发表于 2011-2-19 11:49:22 | 只看该作者
原帖由 slore 于 2011-2-19 11:47 发表
不是只要确定那个硬盘先处理就好了么?


意思是这样,读取原硬盘系统的注册表,按原硬盘系统的方案分配盘符。
回复

使用道具 举报

39#
发表于 2011-2-19 12:19:27 | 只看该作者
可以读取原系统的磁盘签名和分区offset,确定这个分区在当前WinPE系统中的硬盘Index和分区Index来挂载分配盘符,
执行 DefineDosDevice 挂载分区时必须知道硬盘序号和分区序号,DefineDosDevice 挂载分区时,其中一个参数是:
"\Device\HarddiskX\PartitionY" 这样的形式(X、Y分别为硬盘ID和分区ID),所以关键是由原系统注册表的分区offset
与工具读取到的分区offset对比,来确定分区序号,因此,简单单纯的批处理可能无法完成这功能了,因为原系统中的
一些分区可能是没有分配到盘符的,如某些机子的备份隐藏分区、用户有意的隐藏分区或用户有意隐藏的驱动器卷,
这些分区不一定是第一分区,也不一定是最后分区,可以是其中任一分区。


所以觉得知道硬盘ID处理好了就OK了吧,你所说的初批处理不能完成的对隐藏分区的这些。。。貌似不影响确定硬盘顺序
回复

使用道具 举报

40#
 楼主| 发表于 2011-2-19 12:45:55 | 只看该作者
原帖由 slore 于 2011-2-19 12:19 发表


所以觉得知道硬盘ID处理好了就OK了吧,你所说的初批处理不能完成的对隐藏分区的这些。。。貌似不影响确定硬盘顺序


你认真从头看这个主题,前面已多次提到,同一硬盘,在正常系统和WinPE系统中认定的硬盘ID是不同的,正是出现这种特殊情况才出现这个主题。
回复

使用道具 举报

41#
发表于 2011-2-20 20:23:22 | 只看该作者
这个问题很不好解决,主要缘由于WINDOWS本身的混乱,在多PATA硬盘的情况下甚至还会出现交叉分配盘符的问题,不过主从盘还算清楚,到了SATA则出现了端口检测顺序的问题,如果再加上多硬盘控制器+多硬盘那就更乱成一团了。除非原来有且只有一个硬盘中有windows并从其注册表读取挂接顺序。

[ 本帖最后由 netwinxp 于 2011-2-20 20:25 编辑 ]
回复

使用道具 举报

42#
发表于 2011-2-21 09:18:24 | 只看该作者
根据我的经验,如果用户不主动更改BIOS的硬盘启动顺序(要注意插入U盘可能改变硬盘启动顺序),全内置PE是不会改变硬盘顺序的。
CSPE和0PE以前会改变硬盘顺序的,这些都是全外置PE,对硬盘进行了map。
0PE新版做了处理,目前不会改变硬盘顺序。

不知九个使用的是哪个PE?让我们来分析一下。
最好的验证方式是PXE启动。
回复

使用道具 举报

43#
发表于 2011-2-21 09:25:39 | 只看该作者
search usbdlm
回复

使用道具 举报

44#
发表于 2011-2-21 10:10:02 | 只看该作者
看来这个问题很复杂,还得靠自己的眼睛。
回复

使用道具 举报

45#
 楼主| 发表于 2011-2-21 11:04:52 | 只看该作者
原帖由 zhaohj 于 2011-2-21 09:18 发表
根据我的经验,如果用户不主动更改BIOS的硬盘启动顺序(要注意插入U盘可能改变硬盘启动顺序),全内置PE是不会改变硬盘顺序的。
CSPE和0PE以前会改变硬盘顺序的,这些都是全外置PE,对硬盘进行了map。
0PE新版 ...


本人使用的是全内置PE,应该是深度以前一个版本,大概是4.2版(本人砍掉了外置),PE和XP系统都安装在同一硬盘的同一分区。

都是在同一硬盘上启动,这个与BIOS无关,还是与系统有关,现在测试的机子很特殊,
由"万家牌"硬件组成(很多是朋友或别人换下来的装上去的):主板不支持SATA硬盘(无SATA接口),开始挂了一个40G的IDE硬盘,后来从朋友那个得到一个80G的SATA硬盘(通过PCI3114西霸卡挂上);
系统也很乱:WinPE本身集成了SIL3114驱动,而XP系统的SIL3114驱动是后来装上去的。

所以初步判断是与系统有关,或者说是与系统加载驱动的顺序有关,由于硬盘上的XP系统的SIL3114驱动是后来安装的,PCI3114卡上挂载的硬盘可能最后才被识别到,被认为是第二硬盘;
WinPE系统内置集成SIL3114驱动,PCI3114卡上挂载的硬盘可能首先被识别到,被认为是第一硬盘。所以出现了不同系统硬盘顺序不同。

[ 本帖最后由 lxl1638 于 2011-2-21 11:08 编辑 ]
回复

使用道具 举报

46#
发表于 2011-2-21 11:51:34 | 只看该作者
各位大侠,你们研究了主板0与1的接口,研究了进PE与操作系统不同,但是还有一个问题你们没考虑,这就是系统是从哪一个硬盘启动的,也就是BIOS设置第一启动是哪个硬盘,这在启动系统后会影响到盘符,还有就是这几个硬盘有几个主分区,不管哪个硬盘,默认系统安装好后主分区都是靠前的。因此,多硬盘机子未整理的盘符是很乱的。基本上是这样,启动系统的活动主分区最前,其它硬盘的主分区依次,启动系统的硬盘的其它分区,其它硬盘的其它分区。
回复

使用道具 举报

47#
发表于 2011-2-21 12:07:59 | 只看该作者
现在不考虑盘符,只考虑硬盘顺序。
九哥能否在grldr的命令行下看一下硬盘顺序呢?
geometry (hd0)
geometry (hd1)
回复

使用道具 举报

48#
发表于 2011-2-21 12:15:51 | 只看该作者
2个硬盘,都有系统。。。。进入不同的系统话,自己本身所在硬盘应该是C,D,。。。这样吧。

那么进入PE后又希望谁先谁后呢?
回复

使用道具 举报

49#
发表于 2011-2-21 12:39:40 | 只看该作者
原帖由 zhaohj 于 2011-2-21 12:07 发表
现在不考虑盘符,只考虑硬盘顺序。
九哥能否在grldr的命令行下看一下硬盘顺序呢?
geometry (hd0)
geometry (hd1)

grldr下硬盘顺序和dos以及bios中一致,凡是bios中设为启动硬盘的为hd0。
如果不从硬盘启动,而是从光盘或软盘启动,实模式中的硬盘顺序也是混乱的,尤其是存在不同接口的硬盘时,比如同时接了ide,sata, usb三个硬盘,然后从软盘启动dos,天知道硬盘顺序是怎么样的。

当然,新一点的bios可以设置第二第三第四等顺序启动设备,那实模式下硬盘顺序应该和bios设置中的
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-2-26 07:42

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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