详细步骤:
一、 准备win7.vhd文件
方法一、使用虚拟机(VPC、Hyper-v)正常安装windows 7,直到可以进入桌面。安装之前要注意:将虚拟磁盘vhd文件挂载在windows7下,将磁盘划分成一个主分区,然后卸载。安装时直接将windows 7安装在这个分区下。也就是避免windows 7安装时创建100M的System Recovery分区。
安装完成后再次挂载到windows7下,删除vhd文件内根目录下的boot文件夹、bootmgr、nrldr等文件,因为用不到他们。
方法二、直接使用《不安装操作系统,使用VHD双启动系统到Win7及win2k8R2 》中提到的win7.vhd文件,当然此文件必须在你的计算机引导并安装完成,并进入桌面。如果你在这个vhd文件中安装了常用的软件更好了。
Win7.vhd文件准备好后,复制到移动硬盘内的System目录内。推荐第二种方法,避免在产生驱动问题。
二、 修改win7.vhd文件内usb.inf、usbport.inf、usbstor.inf三个驱动文件
1、将准备好的win7.vhd文件挂载到windows7下。例如:挂在到V盘。
2、进入 V:\windows\inf\ 文件夹,找到如下usb.inf、usbport.inf、usbstor.inf文件,依次双击打开,找到对应的部分,修改内容如下(红色字符为增加的内容,注意红色的英文半角;号),然后保存覆盖原文件:
usb.inf
;[SignatureAttributes]
;usbccgp.sys=SignatureAttributes.DRM
;usbhub.sys=SignatureAttributes.DRM
[StandardHub.AddService]
DisplayName = %StandardHub.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
;StartType = 3 ; SERVICE_DEMAND_START
StartType = 0 ; SERVICE_BOOT_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%\usbhub.sys
;LoadOrderGroup = Base
LoadOrderGroup = System Bus Extender
[CommonClassParent.AddService]
DisplayName = %GenericParent.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
;StartType = 3 ; SERVICE_DEMAND_START
StartType = 0 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%\usbccgp.sys
;LoadOrderGroup = Base
LoadOrderGroup = Boot Bus Extender
——————————————————————————————————————
usbport.inf
[ControlFlags]
;BasicDriverOk = *
;ExcludeFromSelect = *
;[SignatureAttributes]
;usbehci.sys=SignatureAttributes.DRM
;usbhub.sys=SignatureAttributes.DRM
;usbohci.sys=SignatureAttributes.DRM
;usbport.sys=SignatureAttributes.DRM
;usbuhci.sys=SignatureAttributes.DRM
;[SignatureAttributes.DRM]
;DRMLevel=1300
[EHCI.AddReg.NT]
HKR,,EnumPropPages32,,"usbui.dll,USBControllerPropPageProvider"
HKR,,Controller,1,01
;HKLM,System\CurrentControlSet\Services\usbehci,BootFlags,0x00010003,4
[EHCI.AddService]
DisplayName = %EHCIMP.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
;StartType = 3 ; SERVICE_DEMAND_START
StartType = 0 ; SERVICE_BOOT_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%\usbehci.sys
;LoadOrderGroup = Base
LoadOrderGroup = Boot Bus Extender
[OHCI.AddReg.NT]
HKR,,EnumPropPages32,,"usbui.dll,USBControllerPropPageProvider"
HKR,,Controller,1,01
;HKLM,System\CurrentControlSet\Services\usbohci,BootFlags,0x00010003,4
[OHCI.AddService]
DisplayName = %OHCIMP.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
;StartType = 3 ; SERVICE_DEMAND_START
StartType = 0 ; SERVICE_BOOT_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%\usbohci.sys
;LoadOrderGroup = Base
LoadOrderGroup = Boot Bus Extender
[UHCI.AddReg.NT]
HKR,,EnumPropPages32,,"usbui.dll,USBControllerPropPageProvider"
HKR,,Controller,1,01
;HKLM,System\CurrentControlSet\Services\usbuhci,BootFlags,0x00010003,4
[UHCI.AddService]
DisplayName = %UHCIMP.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
;StartType = 3 ; SERVICE_DEMAND_START
StartType = 0 ; SERVICE_BOOT_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%\usbuhci.sys
;LoadOrderGroup = Base
LoadOrderGroup = Boot Bus Extender
[ROOTHUB.AddReg.NT]
HKR,,EnumPropPages32,,"usbui.dll,USBHubPropPageProvider"
;HKLM,System\CurrentControlSet\Services\usbhub,BootFlags,0x00010003,4
[ROOTHUB.AddService]
DisplayName = %ROOTHUB.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
;StartType = 3 ; SERVICE_DEMAND_START
StartType = 0 ; SERVICE_BOOT_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%\usbhub.sys
;LoadOrderGroup = Base
LoadOrderGroup = System Bus Extender
————————————————————————————————————
usbstor.inf
[USBSTOR.AddService]
DisplayName = %USBSTOR.SvcDesc%
ServiceType = 1
;StartType = 3
StartType = 0
ErrorControl = 1
ServiceBinary = %12%\USBSTOR.SYS
LoadOrderGroup = System Bus Extender
3、进入 v:\Windows\System32\DriverStore\FileRepository\,
找到名为usb.inf_……的文件夹,然后把刚才改好的usb.inf文件复制到此处覆盖原文件;
然后继续找名为usbport.inf_……的文件夹,用改好的usbport.inf文件覆盖此处的原文件;
继续找名为usbstor.inf_……的文件夹,用改好的usbstor.inf覆盖此处的原文件。
注意:这个位置的文件夹和文件所有权属于TrustedInstaller(System),直接改是不行的,首先要修改所有权为登录用户,并且赋予完全权限,才可以修改。别说你不会啊!!
三、修改win7.vhd文件内的注册表
首先,将准备好的win7.vhd文件挂载到windows7下。例如:挂在到V盘。
在本机中运行regedit打开注册表编辑器,点击HKEY_LOCAL_MACHINE,
然后点 文件, 加载配置单元,
然后会打开资源管理器,浏览到 v:\Windows\System32\config\SYSTEM system是个无后缀名的文件,其实就是注册表数据库。打开之后出现如下图,在项名称中填入名字,随便起个名字TEMP。
点击确定后,展开HKEY_LOCAL_MACHINE,浏览到TEMP
开始修改:
\ControlSet001\Services下修改下面五处:usbccgp;usbehci;usbhub;usbstor;usbuhci,把Start的值改成0,Group的值改成boot bus extender,其中usbstor没有Group自己添加。
修改完毕后,点击 TEMP项,然后点击文件,卸载配置单元。这样win7.vhd文件的注册表修改完毕。
四、 使移动硬盘可引导
最好将移动硬盘合并为一个分区,避免以后调整磁盘分区大小。
假设移动硬盘第一分区盘符为F:而且足够大,个人认为至少大于60G空余空间,根据个人安装软件多少而定。
运行cmd进入命令行运行如下命令:
bootsect /nt60 f: /mbr
这个命令将把nt60版的引导信息写入移动硬盘的mbr!因此一定要小心别搞错了盘符!
将前文《不安装操作系统,使用VHD双启动系统到Win7及win2k8R2 》中提到的 boot目录、bootmgr、nrldr文件复制到移动硬盘第一分区
打开windows的磁盘管理看你的移动硬盘是第几块磁盘,比如是“磁盘2”
则在cmd中运行:
bcdedit /store f:\boot\bcd /set {bootmgr} device partition=\device\harddiskvolume3 这里的3是磁盘2+1,同理如果是磁盘3,则这里为4
然后运行
bcdedit /store f:\boot\bcd /set {Default} device vhd=[F:]\system\win7.vhd
bcdedit /store f:\boot\bcd /set {Default} osdevice vhd=[F:]\system\win7.vhd
bcdedit /store f:\boot\bcd /set {Default} detecthal on
打开detecthal参数,对移动win7的兼容性非常重要,作用是启动时强制检测hal(即俗称的电源管理模式,做过系统封装的都知道这东西的重要性)。xp就没有这个功能……
由于我们前文中使用的bcd文件是windows7和windows2008R2双引导的启动菜单所以我们这里要把windows2008R2的启动项删除掉
运行bcdedit /store f:\boot\bcd 从返回的结果找到windows2008R2的启动项的GUID
然后使用命令删除它:
bcdedit /store f:\boot\bcd /delete
注意这些命令中的参数 /store f:\boot\bcd 是告诉bcdedit去编辑f:\boot\bcd这个位置的bcd文件,不加这个参数则把本机的bcd文件编辑了,你就惨了~~