详细步骤:

 

 

 

一、   准备win7.vhd文件

方法一、使用虚拟机(VPCHyper-v)正常安装windows 7,直到可以进入桌面。安装之前要注意:将虚拟磁盘vhd文件挂载在windows7下,将磁盘划分成一个主分区,然后卸载。安装时直接将windows 7安装在这个分区下。也就是避免windows 7安装时创建100MSystem Recovery分区。

安装完成后再次挂载到windows7下,删除vhd文件内根目录下的boot文件夹、bootmgrnrldr等文件,因为用不到他们。

方法二、直接使用《不安装操作系统,使用VHD双启动系统到Win7及win2k8R2 》中提到的win7.vhd文件,当然此文件必须在你的计算机引导并安装完成,并进入桌面。如果你在这个vhd文件中安装了常用的软件更好了。

 

Win7.vhd文件准备好后,复制到移动硬盘内的System目录内。推荐第二种方法,避免在产生驱动问题。

 

 

二、   修改win7.vhd文件内usb.infusbport.infusbstor.inf三个驱动文件

1、将准备好的win7.vhd文件挂载到windows7下。例如:挂在到V盘。

2、进入 V:\windows\inf\ 文件夹,找到如下usb.infusbport.infusbstor.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覆盖此处的原文件。

 

注意:这个位置的文件夹和文件所有权属于TrustedInstallerSystem),直接改是不行的,首先要修改所有权为登录用户,并且赋予完全权限,才可以修改。别说你不会啊!!

 

 

 

三、修改win7.vhd文件内的注册表

 

首先,将准备好的win7.vhd文件挂载到windows7下。例如:挂在到V盘。

在本机中运行regedit打开注册表编辑器,点击HKEY_LOCAL_MACHINE

 

然后点 文件, 加载配置单元,

 

然后会打开资源管理器,浏览到 v:\Windows\System32\config\SYSTEM     system是个无后缀名的文件,其实就是注册表数据库。打开之后出现如下图,在项名称中填入名字,随便起个名字TEMP

 

 

点击确定后,展开HKEY_LOCAL_MACHINE,浏览到TEMP

 

开始修改:

 

\ControlSet001\Services下修改下面五处:usbccgpusbehciusbhubusbstorusbuhci,把Start的值改成0Group的值改成boot bus extender,其中usbstor没有Group自己添加。

 

修改完毕后,点击 TEMP项,然后点击文件,卸载配置单元。这样win7.vhd文件的注册表修改完毕。

 

 

 

四、  使移动硬盘可引导

 

     最好将移动硬盘合并为一个分区,避免以后调整磁盘分区大小。

     假设移动硬盘第一分区盘符为F:而且足够大,个人认为至少大于60G空余空间,根据个人安装软件多少而定。

      

运行cmd进入命令行运行如下命令:

                  bootsect /nt60 f: /mbr        

这个命令将把nt60版的引导信息写入移动硬盘的mbr!因此一定要小心别搞错了盘符!

 

     将前文《不安装操作系统,使用VHD双启动系统到Win7及win2k8R2 》中提到的 boot目录、bootmgrnrldr文件复制到移动硬盘第一分区

     打开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文件是windows7windows2008R2双引导的启动菜单所以我们这里要把windows2008R2的启动项删除掉

               运行bcdedit /store f:\boot\bcd 从返回的结果找到windows2008R2的启动项的GUID

             然后使用命令删除它:

 

                bcdedit /store f:\boot\bcd /delete <guid> /cleanup

 

              注意这些命令中的参数 /store f:\boot\bcd 是告诉bcdedit去编辑f:\boot\bcd这个位置的bcd文件,不加这个参数则把本机的bcd文件编辑了,你就惨了~~