ARC命名是Windows NT系统用来定位其引导分区所在的路径,也就是利用它指明引导分区在哪一个磁盘控制器,哪一个硬盘,哪一个分区内。ARC命名可分为两大类,以scsi为首或以multi为首,现分别说明如下: scsi(x)disk(y)rdisk(0)partition(z): 以scsi为首,表明该磁盘控制器为SCSI卡,并且该卡上的BIOS被设置为禁用(disable) scsi(x):表示第几个控制卡,x以0为起始数字。
disk(y):表示该控制卡下的第几块物理磁盘,y以0为起始数字。
partition(z):表示该物理磁盘上第几个分区,z以1为起始数字。
注意:以scsi为首的ARC命名的rdisk项总是rdisk(0)。
multi(x)disk(0)rdisk(y)partition(z): 以multi为首,表明该磁盘控制器是IDE,ESDI,或是BIOS允许使用(enable)的SCSI卡。
multi(x):表示第几个控制卡,x以0为起始数字。
rdisk(y):表示该控制卡下的第几块物理磁盘,y以0为起始数字。
partition(z):表示该物理磁盘上第几个分区,z以1为起始数字。
注意:以multi为首的ARC命名的disk项总是disk(0)。 还有一点必须注意的是,系统给NT分区编号时,主分区的编号永远排在扩展分区前。例题 windows2000安装在D盘下,D盘为扩展分区的一个逻辑驱动器,系统可以正常启动。后来,又添加了一个分区。重启时发现系统无法引导了,是何原因,如何解决。 分析:一个磁盘上最多只能有一个扩展分区,则新添加的分区为主分区,而主分区的编号排在扩展分区前,所以D盘的实际ARC路径的partition值增加了1,而boot.ini文件的内容没变,这样再利用原来的ARC路径就找不到D盘的系统目录了。解决的方法就是修改boot.ini文件。
ARC命名是Windows NT系统用来定位其引导分区所在的路径,也就是利用它指明引导分区在哪一个磁盘控制器,哪一个硬盘,哪一个分区内。
ARC命名可分为两大类,以scsi为首或以multi为首,现分别说明如下:
scsi(x)disk(y)rdisk(0)partition(z): 以scsi为首,表明该磁盘控制器为SCSI卡,并且该卡上的BIOS被设置为禁用(disable)
scsi(x):表示第几个控制卡,x以0为起始数字。
disk(y):表示该控制卡下的第几块物理磁盘,y以0为起始数字。
partition(z):表示该物理磁盘上第几个分区,z以1为起始数字。
注意:以scsi为首的ARC命名的rdisk项总是rdisk(0)。
multi(x)disk(0)rdisk(y)partition(z): 以multi为首,表明该磁盘控制器是IDE,ESDI,或是BIOS允许使用(enable)的SCSI卡。
multi(x):表示第几个控制卡,x以0为起始数字。
rdisk(y):表示该控制卡下的第几块物理磁盘,y以0为起始数字。
partition(z):表示该物理磁盘上第几个分区,z以1为起始数字。
注意:以multi为首的ARC命名的disk项总是disk(0)。
还有一点必须注意的是,系统给NT分区编号时,主分区的编号永远排在扩展分区前,故当引导分区处于原硬盘的剩余磁盘空间时,必须将此磁盘空间设为主分区(已存在扩展分区),该分区虽然后编号,但其编号反而在原来扩展分区中的逻辑分区编号之前。
下面来分析创建引导的ARC名称,代码如下:
#001 NTSTATUS
#002 INIT_FUNCTION
#003 NTAPI
#004 IopCreateArcNames(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
#005 {获取配置信息。
#006 PCONFIGURATION_INFORMATION ConfigInfo = IoGetConfigurationInformation();
获取Freeloader的参数。
#007 PARC_DISK_INFORMATION ArcDiskInfo = LoaderBlock->ArcDiskInformation; #008 CHAR Buffer[128]; #009 ANSI_STRING ArcBootString, ArcSystemString, ArcString; #010 UNICODE_STRING ArcName, BootPath, DeviceName; #011 BOOLEAN SingleDisk; #012 ULONG i, j, Length; #013 PDEVICE_OBJECT DeviceObject; #014 ULONG Signature, Checksum, PartitionCount; #015 PLIST_ENTRY NextEntry; #016 PARC_DISK_SIGNATURE ArcDiskEntry; #017 NTSTATUS Status; #018 BOOLEAN FoundBoot = FALSE; #019 PULONG PartitionBuffer; #020