上次打了些MinlogonEWF的文章,突然想到好像根本還沒有寫過在USB裝置裝XP的方法。其實方法很多,主流方法大都是先做好一張修改過的XP在直接用那張光碟安裝在USB裝置上,不過也有些方法是先裝好之後直接改,改完再Ghost到USB上的。人當然是要跟隨潮流的~所以介紹的當然是主流方法,不過我個人是傾向先在VMware裝完之後Ghost出來。下面教學會有點煩瑣,自認DIY不來的人可以直接在這邊下載老外做好的無腦安裝包總共三步,一、二、三,比站著穿還簡單,他是直接修改正在用的系統直接改成USB啟動的(ps.用這個無腦法裝完會有個特殊功能,就是可以在任意電腦開機 = = 之前不小心發現的,SantaRosa裝的拿到AMD的都能用...),不過他會需要安裝包的active key要會員才有,需要的可以留言和我要~

另外,下面看完覺得太累想跳過第二到第七步的,可以點這裡下載我改好的,自解檔直接雙擊選擇目錄之後放進光碟I386目錄。

正題開始,參考文章

重點到底是甚麼?

簡單來說,微軟表示XP不能從USB裝置啟動

這一頁當例子,上面說:

Q: USB儲存裝置可以拿來當主要磁碟區嗎??
不,在一般的系統上USB儲存裝置不能拿來當成主要磁碟區...

或是這一個,微軟的新聞組出來的:

Windows 不能從一個USB裝置啟動....

 

 

總之,長話短說,是他們不會騙人,其實是可以的。

基本需求

  • 一個可以開機的系統來執行以下工作(廢話 = =)
  • 一個USB隨身硬碟,或是隨身碟
  • 一個正版差屁光碟(我還沒試過SP3,不過應該也可以,原文是測試到SP1)
  • Ultraiso (或是其他可以編輯ISO的工具,ex:Nero)
  • 微軟的CAB SDK
  • 一個支援ISO的燒錄軟體,原文推薦burnatonce我個人沒用過,我個人則是推薦Imgburn

正片開始~:

大意:

我們將會把一些XP光碟中的檔案複製出來,然後做一些修改之後重新燒一張出來,然後就可以直接用這張光碟安裝到USB裝置了~
下面是幾個重點請先讀一下吧

1) 你的電腦支援從USB開機嗎?

通常不要太舊的主機板都可以,不確定的話在BIOS開機選項裡面看看有沒有USB裝置選項

2) 確認USB裝置的"開機類型"

直接連結此USB裝置到電腦不要經過Hub然後關機,關機之後把所有的硬碟暫時拔掉,然後放入你的原版差屁光碟,進到讓妳選安裝硬碟那一步如果可以看到你的USB裝置的話就沒問題了。如果看不到並看到一個"Windows找不到任何磁碟"的錯誤的話,沒關係通常不是大問題,你只需要"恰當的"重新格式化你的裝置。下載這個HP的工具(題外話,HP好像漸漸沒有High Price的印象了..),然後用這個工具格式化你的硬碟/隨身碟,我和原文作者一樣,都是選擇NTFS,沒有出現過問題,之後此磁碟就可以用了

3) 將原版光碟轉成ISO檔案

簡單的一步,檔開UltraISO,找到"從光碟製作ISO",然後點下去就好了。

4) 把需要修改的檔案複製出來

檔轉換ISO完成之後,關閉並重新開啟UltraISO,然後打開你剛剛製作的ISO檔案(檔案=>開啟舊檔),然後在左邊選擇I386資料夾,之後選擇以下檔案(按住Ctrl選擇多個檔案)

  • TXTSETUP.SIF
  • DOSNET.INF
  • USB.IN_
  • USBPORT.IN_
  • USBSTOR.IN_

直接拖出來到隨便一個資料夾

5) 解開 IN_ 檔案

用Cab SDK (從命令列中)來解開其中的.IN_檔案,每個都有"一個" .inf 檔案。如果你不確定如何使用Cab SDK的話, 舉個例子,在命令列中打"cabarc x USBSTOR.IN_"  其實直接用WinRAR就可以解開來了,最後應該可以得到這幾個檔案

  • usb.inf
  • usbport.inf
  • usbstor.inf

然後就可以把.IN_那幾個幹掉了

6) 修改檔案

這是最主要的一步,我會盡量仔細解釋每一步。 用記事本來打開以下檔案。
6-A) TXTSETUP.SIF

這個是XP光碟安裝的時候初始化會載入的檔案,我們要在這個檔案中改變XP啟動時對USB裝置的設定,預設是把他們當作普通USB輸入裝置,我們要把它改變成"能夠使用"的磁碟機
第一步,把以下行從 [InputDevicesSupport.Load] 移動到[BootBusExtenders.Load] 就像以下 (ps. 記的善用Ctrl+F)

[BootBusExtenders.Load]
pci = pci.sys
acpi = acpi.sys
isapnp = isapnp.sys
acpiec = acpiec.sys
ohci1394 = ohci1394.sys
usbehci = usbehci.sys
usbohci = usbohci.sys
usbuhci = usbuhci.sys
usbhub = usbhub.sys
usbstor = usbstor.sys
[InputDevicesSupport.Load]
usbehci = usbehci.sys
usbohci = usbohci.sys
usbuhci = usbuhci.sys
usbhub = usbhub.sys

usbccgp = usbccgp.sys
hidusb = hidusb.sys
serial = serial.sys
serenum = serenum.sys
usbstor = usbstor.sys

...再往下,對 [BootBusExtenders] 和[InputDevicesSupport]也是一樣

[BootBusExtenders]
pci = "PCI-Bustreiber",files.pci,pci
acpi = "ACPI Plug & Play-Bustreiber",files.acpi,acpi
isapnp = "ISA Plug & Play-Bustreiber",files.isapnp,isapnp
acpiec = "Integrierter ACPI-Controllertreiber",files.none,acpiec
ohci1394 = "IEEE-1394-Bus-OHCI-konformer Anschlusstreiber",files.ohci1394,ohci1394
usbehci = "Erweiterter Hostcontroller",files.usbehci,usbehci
usbohci = "Open Hostcontroller",files.usbohci,usbohci
usbuhci = "Universeller Hostcontroller",files.usbuhci,usbuhci
usbhub = "Standard-USB-Hubtreiber",files.usbhub,usbhub
usbstor = "USB-Speicherklassentreiber",files.usbstor,usbstor
[InputDevicesSupport]
usbehci = "Erweiterter Hostcontroller",files.usbehci,usbehci
usbohci = "Open Hostcontroller",files.usbohci,usbohci
usbuhci = "Universeller Hostcontroller",files.usbuhci,usbuhci
usbhub = "Standard-USB-Hubtreiber",files.usbhub,usbhub

hidusb = "HID-Parser",files.hidusb,hidusb
serial = "Treiber f�r seriellen Anschluss",files.none,serial
serenum = "Enumerator f�r seriellen Anschluss",files.none,serenum
usbstor = "USB-Speicherklassentreiber",files.usbstor,usbstor
usbccgp = "USB Generic Parent Driver",files.usbccgp,usbccgp

再來,我們也需要在註冊表區加入一些值,在[HiveInfs.Fresh]區中插入以下的值section:

[HiveInfs.Fresh]
AddReg = hivedef.inf,AddReg
AddReg = hivesys.inf,AddReg
AddReg = hivesft.inf,AddReg
AddReg = hivecls.inf,AddReg
AddReg = hiveusd.inf,AddReg
AddReg = dmreg.inf,DM.AddReg
AddReg = usbboot.inf,usbservices

然後也在[SourceDisksFiles]新增一行

[SourceDisksFiles]
usbboot.inf = 1,,,,,,_x,3,,3
bootvid.dll = 1,,,,,,3_,2,0,0,,1,2
kdcom.dll = 1,,,,,,3_,2,0,0,,1,2

終於,儲存然後關閉TXTSETUP.SIF,已經做完該對他做的事了xd

6-B) DOSNET.INF

再來,打開DOSNET.INF 然後在[Files]區加上一行,向下面這樣:

[Files]
d1,usbboot.inf
d1,_default.pif
d1,12520437.cpx
d1,12520850.cpx

....

6-C) usb.inf

對[StandardHub.AddService]與[CommonClassParent.AddService] 區做以下改變:

[StandardHub.AddService]
DisplayName = %StandardHub.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 0 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%\usbhub.sys
LoadOrderGroup = Boot Bus Extender
[CommonClassParent.AddService]
DisplayName = %GenericParent.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 0 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%\usbccgp.sys
LoadOrderGroup = Boot Bus Extender

6-D) usbport.inf

對[EHCI.AddService], [OHCI.AddService] , [UHCI.AddService] 以及[ROOTHUB.AddService]區段做以下改變:

[EHCI.AddService]
DisplayName = %EHCIMP.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 0 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%\usbehci.sys
LoadOrderGroup = Boot Bus Extender

[OHCI.AddService]
DisplayName = %OHCIMP.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 0 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%\usbohci.sys
LoadOrderGroup = Boot Bus Extender

[UHCI.AddService]
DisplayName = %UHCIMP.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 0 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%\usbuhci.sys
LoadOrderGroup = Boot Bus Extender

[ROOTHUB.AddService]
DisplayName = %ROOTHUB.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 0 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%\usbhub.sys
LoadOrderGroup = Boot Bus Extender

6-E) usbstor.inf

在[USBSTOR.AddService]區做以下改變:
[USBSTOR.AddService]
DisplayName = %USBSTOR.SvcDesc%
ServiceType = 1
StartType = 0
Tag = 3

ErrorControl = 1
ServiceBinary = %12%\USBSTOR.SYS
LoadOrderGroup = Boot Bus Extender

6-F) 新增一個檔案: USBBOOT.INF

新增一個檔案並命名為USBBOOT.INF然後在裡面加入以下內容:

[usbservices]
HKLM,"SYSTEM\CurrentControlSet\Services\USBSTOR","DisplayName",0x00000000,"USB Mass Storage Driver"
HKLM,"SYSTEM\CurrentControlSet\Services\USBSTOR","ErrorControl",0x00010001,1
HKLM,"SYSTEM\CurrentControlSet\Services\USBSTOR","Group",0x00000000,"System Reserved"
HKLM,"SYSTEM\CurrentControlSet\Services\USBSTOR","ImagePath",0x00020000,"system32\DRIVERS\USBSTOR.SYS"
HKLM,"SYSTEM\CurrentControlSet\Services\USBSTOR","Start",0x00010001,0
HKLM,"SYSTEM\CurrentControlSet\Services\USBSTOR","Type",0x00010001,1
HKLM,"SYSTEM\CurrentControlSet\Services\usbehci","DisplayName",0x00000000,"USB 2.0 Enhanced Host Controller Miniport Driver"
HKLM,"SYSTEM\CurrentControlSet\Services\usbehci","ErrorControl",0x00010001,1
HKLM,"SYSTEM\CurrentControlSet\Services\usbehci","Group",0x00000000,"System Reserved"
HKLM,"SYSTEM\CurrentControlSet\Services\usbehci","ImagePath",0x00020000,"system32\DRIVERS\usbehci.sys"
HKLM,"SYSTEM\CurrentControlSet\Services\usbehci","Start",0x00010001,0
HKLM,"SYSTEM\CurrentControlSet\Services\usbehci","Type",0x00010001,1
HKLM,"SYSTEM\CurrentControlSet\Services\usbhub","DisplayName",0x00000000,"USB2 Enabled Hub"
HKLM,"SYSTEM\CurrentControlSet\Services\usbhub","ErrorControl",0x00010001,1
HKLM,"SYSTEM\CurrentControlSet\Services\usbhub","Group",0x00000000,"System Reserved"
HKLM,"SYSTEM\CurrentControlSet\Services\usbhub","ImagePath",0x00020000,"system32\DRIVERS\usbhub.sys"
HKLM,"SYSTEM\CurrentControlSet\Services\usbhub","Start",0x00010001,0
HKLM,"SYSTEM\CurrentControlSet\Services\usbhub","Type",0x00010001,1
HKLM,"SYSTEM\CurrentControlSet\Services\usbuhci","DisplayName",0x00000000,"Microsoft USB Universal Host Controller Miniport Driver"
HKLM,"SYSTEM\CurrentControlSet\Services\usbuhci","ErrorControl",0x00010001,1
HKLM,"SYSTEM\CurrentControlSet\Services\usbuhci","Group",0x00000000,"System Reserved"
HKLM,"SYSTEM\CurrentControlSet\Services\usbuhci","ImagePath",0x00020000,"system32\DRIVERS\usbuhci.sys"
HKLM,"SYSTEM\CurrentControlSet\Services\usbuhci","Start",0x00010001,0
HKLM,"SYSTEM\CurrentControlSet\Services\usbuhci","Type",0x00010001,1
HKLM,"SYSTEM\CurrentControlSet\Services\usbohci","DisplayName",0x00000000,"Microsoft USB Open Host Controller Miniport Driver"
HKLM,"SYSTEM\CurrentControlSet\Services\usbohci","ErrorControl",0x00010001,1
HKLM,"SYSTEM\CurrentControlSet\Services\usbohci","Group",0x00000000,"System Reserved"
HKLM,"SYSTEM\CurrentControlSet\Services\usbohci","ImagePath",0x00020000,"system32\DRIVERS\usbohci.sys"
HKLM,"SYSTEM\CurrentControlSet\Services\usbohci","Start",0x00010001,0
HKLM,"SYSTEM\CurrentControlSet\Services\usbohci","Type",0x00010001,1

7) 重新將inf檔案包裝成原來的IN_ 格式

打開命令列視窗,並移動到你放那些檔案的資料夾(cd指令)然後用以下指令來包裝這些檔案:

cabarc指令為,先用cd指令到cabarc所儲存的資料夾,然後把要打包的inf檔案放到一起,之後就照下面的。(ps. 需要的cabarc在微軟網站下載的cabsdk解壓縮後BIN資料夾內)

cabarc n USB.IN_ usb.inf
cabarc n USBPORT.IN_ usbport.inf
cabarc n USBSTOR.IN_ usbstor.inf

恭喜~所有需要的改變都做完了~

8) 把修改過後的檔案放回ISO中

用UltraISO打開原版光碟的映像檔,到I386資料夾把以下幾個檔案刪除之後存檔:

  • DOSNET.INF
  • TXTSETUP.SIF
  • USB.IN_
  • USBPORT.IN_
  • USBSTOR.IN_

確定有存檔之後,重新打開此ISO檔案然後在I386資要夾中把修改過的以下幾個檔案拖進去:

  • USBBOOT.INF
  • DOSNET.INF
  • TXTSETUP.SIF
  • USB.IN_
  • USBPORT.IN_
  • USBSTOR.IN_
儲存,然後就結束了.

9) 將ISO燒成光碟

隨你高興決定想用哪一款燒錄軟體,我用的是免費又簡單的Imgburn

10) 從光碟安裝XP

拔掉"任何"硬碟(所以XP可以把開機訊息寫錯硬碟) ,同時把你要安裝上的USB裝置直接連到電腦,不要經過任何Hub

基本上應該會很順利的安裝,除了以下的

有可能會在安裝過程中出現:

  • 安裝USB驅動程式的時候可能會出現"沒有經過認證",這很正常(廢話,自己修改過了最好還有認證)只要確定幾次就行了
  • 在系統完成安裝的時候,系統可能會警告虛擬記憶體不存在,那個可以不用鳥她。沒有那個孩是可以用,那個只會讓妳的隨身碟早點壞掉 = =
    當一切都可以用之後,關機並連接你所有裝置之後重新開機。
arrow
arrow
    全站熱搜

    victor8314 發表在 痞客邦 留言(8) 人氣()