Met enorm veel dank aan defiant in "\[WDS+XP] HowTo: HAL onafhankelijk image ...". Na het lezen van zijn topic ben ik eens aan de slag gegaan om een volledig systeemonafhankelijk standaardimage te bouwen. Ik heb vele problemen kunnen oplossen en ik hoop met dit topic nog vele anderen te kunnen helpen.
** Waarschuwing/Disclaimer **
Deze methode wordt niet ondersteund door Microsoft, is geheel op eigen risico en is af te raden in productie omgevingen.
Dat gezegd hebbende, werkt het bijna mij al tijden feilloos bij verschillende type machines.
Benodigdheden
Installeren van de bron-Windows
Mass Storage Drivers toevoegen
HAL-detectie toevoegen aan een image
Tweaks na textmode-setup en voor GUI-setup
Cleartype aanzetten en ander thema kiezen in default user profile en loginvenster
Documents en Folders hernoemen
Browserkeuzescherm verwijderen
Nutteloze tweak
Windows files opschonen na Sysprep om te imagen
Windows register opschonen na Sysprep om te imagen
Image maken
WDS boot image aanpassen
Klaar!
Extra's
De WDS-HAL-methode
Een Discover image flat maken
Achteraf mass-storage (boot)drivers toevoegen aan een image
To-Do list
Troubleshooting
Sysprep: "An error occured while trying to update..."
Mijn ...-software wil niet imagen
BSOD 0000007B bij Flat vanaf USB schijf
Voor het bouwen van een image dat op alle systemen werkt (mits binnen de specificaties) zijn er twee belemmeringen:
• HAL type
• Drivers voor massa opslag
Als deze twee belemmeringen worden opgelost dan heb je een volledig systeemonafhankelijk image.
Windows XP en Windows 2003 hebben diverse HAL's en kernels aan boord:
E_ISA_UP (pre-ACPI generieke computer)
MPS_UP (pre-ACPI single processor systeem, single processor kernel)
MPS_MP 1) (pre-ACPI systeem met multi processor kernel)
ACPIPIC_UP (ACPI PIC Uniprocessor)
ACPIAPIC_UP (ACPI Advanced PIC HAL en Uniprocessor kernel)
ACPIAPIC_MP 1) (ACPI Advanced PIC HAL en Multiprocessor kernel)
Windows XP x64 en Windows 2003 x64 kennen slechts één HAL type:
ACPIAPIC_UP
ACPIAPIC_MP 1)
1) zelfde HAL, wel andere (multiprocessor) kernel
Bovenstaande HAL types zijn allemaal backwards compatible maar niet upwards compatible. ACPIAPIC_MP systemen kunnen dus opstarten met een ACPIPIC_UP HAL of zelfs met een E_ISA_UP HAL.
Een kernel is behalve downwards ook upwards compatible. Een singleprocessor systeem kan opstarten met een multiprocessor kernel. Windows is in staat om, als de geinstalleerde HAL van het type ACPIAPIC is, de kernel van UP naar MP te installeren. Andersom niet: Als de kernel MP was en je start op in een single processor (of single core) omgeving, dan blijft de kernel op MP staan.
De x64 versies van Windows kennen alleen de ACPIAPIC HAL en omdat Windows de MP kernel installeert wanneer er multiprocessor wordt gedetecteerd, is het bij de x64 versies alleen nodig om een UP image te maken.
Dan blijft bij Windows XP en Windows 2003 het probleem dat oudere machines doorgaans nog gebruik maken van de ACPIPIC HAL. Veel zijn het er niet meer. Alle nieuw verkochte PCs zijn ACPIAPIC compatible. In het tweedehands circuit of bij nonprofit instellingen komen deze machines nog voor. Als je dus alleen moderne computers hebt dan volstaat een ACPIAPIC_UP image, ook als alle systemen MP zijn.
Ook is er nog E_ISA en MPS. Deze HAL types zul je niet tegenkomen op Windows XP machines, simpelweg omdat vrijwel alle PCs sinds januari 1999 ACPI compatible zijn. Bij E_ISA_UP moet je denken aan de Pentium I en bij MPS_UP/MP aan de Pentium Pro. WinPE 2.0 ondersteunt E_ISA en MPS overigens niet eens, deze machines kunnen dus niet middels WDS worden uitgerold. Wel zal in deze walkthrough de support worden ingebouwd in het image. Met wat tweaks kun je wellicht de Windows 7 setup draaien vanuit WinPE 1.x, iets wat nog op mijn experiment-todo-lijstje staat.
• Een ACPIAPIC bron PC met 1 processor en 1 core (liefst een virtualisatiehost ivm snapshots)
• Windows XP met minimaal service Pack 2 (of Windows 2003 met minimaal Service Pack 1)
• Sysprep: staat op de Windows XP CD-ROM onder SUPPORT
• Windows Longhorn Beta 1: Dit wordt een moeilijke. Deze is niet meer te downloaden en hij is niet meer te gebruiken (betaperiode expired). Op dit moment staat hij in de binaries. Met een goede payserver kun je hem nu nog downloaden.
• WinRE: Windows Recovery Environment, gewoon de Windows Vista of Windows 7 install DVD dus
• Windows Vista/7 32-bit DVD
• WAIK
Kennis:
• Basiskennis van WDS en WAIK
• Basiskennis Sysprep
• Plaats de Windows XP/2003/XPx64/2003x64 CD-ROM en start de installatie
• Bij het F6-scherm druk je op F5 om de HAL te selecteren: ACPI Uniprocessor PC (ACPIAPIC_UP)
• Indien nodig F6 om de LSI1068 (voor VMware) drivers of andere drivers te laden
Na de textmode setup kun je nog wat tweaks doen om Windows "netjes" te maken. Deze tweaks kun je overslaan, maar als je perse wilt tweaken, lees dan bij Tweaks na textmode-setup en voor GUI-setup voor enkele tweaks.
• Installeer Windows zoals gebruikelijk en laat het Administrator wachtwoord leeg (omdat mini-setup "Enter" interpreteert als niet-wijzigen ipv leegmaken)
• Gebruik de standaardinstellingen (dus standaardwaarde voor landcodes, toetsenbordcodes, dat kan allemaal later tijdens mini-setup)
• Kopieer de Windows XP/2003 CD-ROM naar C:\Sources (of een andere zelfgekozen folder)
• Zoek in het register naar "D:\" en vervang deze door "C:\Sources\" (en D:\I386 naar C:\Sources\I386 en D:\AMD64 naar C:\Sources\AMD64)
• Installeer updates, software (bijv. Office), etc.
• Plaats sysprep.exe en setupcl.exe in de C:\Sysprep folder
• Plaats de 32-bit versie van imagex.exe van de WAIK in de C:\Sysprep folder
• Maak een sysprep.inf aan. Een voorbeeld van de inhoud:
Zodat je niet op de Enter toets hoeft te drukken om de hardwaredetectie te starten. Soms werkt een toetsenbord nog niet omdat de drivers wellicht nog niet zijn geinstalleerd, zo hoeft de gebruiker niet langer te wachten. Natuurlijk kun je deze ook overslaan, voor zover dit van Microsoft mag.
Waarom OemPnpDriversPath zo lang met niet-bestaande folders?
Zodat je achteraf drivers kunt toevoegen aan WDS zonder dat je het image hoeft open te breken. Je kunt er nog meer folders aan toevoegen, maar let op de limiet. Je kunt prima niet-bestaande folders toevoegen omdat je die bijvoorbeeld later toevoegt aan WDS.
Kan Drivers ook onder Sysprep ipv de root?
Jazeker. In veel gevallen is de driverfolder toch overbodig na mini-setup. Dan wordt het Sysprep\Drivers\00;... in plaats van Drivers\00;... in sysprep.inf
De driverfolder wordt dan na mini-setup verwijderd omdat mini-setup de hele sysprep folder verwijdert. Sommige Intel GMA videodrivers hebben een bug waardoor een bestand in gebruik blijft waardoor na mini-setup de folder Sysprep en de subfolders van de Intel GMA drivers blijven bestaan. Die moeten na mini-setup handmatig worden verwijderd.
• Controleer of "BuildMassStorageSection=yes" aanwezig is in sysprep.inf
• Voer het volgende commando uit vanuit de Sysprep folder: sysprep -bmsd
• Verander "BuildMassStorageSection=yes" naar "BuildMassStorageSection=no" in sysprep.inf
• Alleen voor Windows XP 32-bit: verwijder uit sysprep.inf de regel "PCI\VEN_104B&DEV_1040=C:\Windows\inf\scsi.inf" 2)
2) DEV_1040 moet worden verwijderd vanwege een bug. Deze driverfile ontbreekt namelijk in Windows XP terwijl de inf file er wel is (overblijfsel uit Windows 2000). De bug geeft alleen problemen als je de vmscsi of buslogic drivers wilt toevoegen, je kunt deze stap dus overslaan.
Nu kun je zelf Mass Storage Drivers toevoegen. Ik geef een voorbeeld aan de hand van de IASTOR drivers (Intel AHCI Drivers). Dit voorbeeld gaat er vanuit dat de Intel AHCI Drivers in C:\Drivers\00 staan.
In iaahci.inf (of andere .inf files) vind je regels die hier op lijken:
Voor elk apparaat in de .inf file plaats je het gedeelte PCI\VEN.....CC_0106 in de sysprep.inf en verwijs je naar de .inf file. Bijvoorbeeld:
Verder moet je van elke mass storage driver ook de .sys files toevoegen aan C:\Sources, ook al heb je de Windows files wellicht in C:\Sources\I386 / AMD64 staan. Mini-setup zoekt de driver.sys in de lokatie van InstallFilesPath in Sysprep.inf. In het bovenstaande voorbeeld komt de file IASTOR.SYS dus in C:\Sources te staan. Andere files zal mini-setup alsnog blijven zoeken in C:\Sources\I386 / AMD64 waardoor het pad in sysprep.inf toch gewoon correct is.
Sysprep zal tijdens z'n bewerkingen een hele rits services toevoegen aan de bootservices van Windows zodat Windows ook kan opstarten met de niet-geinstalleerde drivers. De driver zelf wordt nog niet geinstalleerd. Voor niet-ondertekende drivers is het wellicht makkelijk om in de Local Security Policy/Security Options het installeren van niet-ondertekende drivers automatisch toe te staan. Dit omdat sysprep anders een hele zooi meldingen geeft tijdens z'n bewerkingen.
Als je Windows hebt geinstalleerd binnen je virtualisatiehost met de LSI1068 adapter, dan is het raadzaam om de LSI1068 drivers ook in je image te verwerken zodat je in je virtuele omgeving kunt testen met je image.
Het inbouwen van HAL-detectie kun je overslaan als in je organisatie alleen ACPIAPIC systemen draaien of als je image niet compatible hoeft te zijn met ACPIPIC. Wil je achteraf ACPIPIC inbouwen, dan kan dat eventueel ook middels de WDS-HAL-methode. Deze methode beschrijf ik verderop. HAL-detectie is voor x64 images niet nodig. Ook als je niet aan de Longhorn Beta 1 DVD kunt komen dan hoef je HAL-detectie niet in te bouwen. Je image is dan echter niet compatible met ACPIPIC.
Op de DVD van Longhorn Beta 1 staat onder Sources het bestand INSTALL.WIM. Uit dit imagebestand heb je één bestand nodig: NTLDR. Dit bestand kun je eruit halen met imagex (zit bij de WAIK) of met 7-zip. Vervang NTLDR (in de root folder) van je image door deze NTLDR.
Maak het bestand \Windows\inf\dtecthal.inf aan met de volgende inhoud:
Plaats de meest recente versies van deze files in de \Windows\system32 folder:
• hal.dll (hernoemen naar halstnd.dll), halacpi.dll, halapic.dll, halmacpi.dll, halmps.dll
• ntkrnlpa.exe, ntoskrnl.exe (hernoemen naar ntkrnlup.exe), ntkrpamp.exe, ntkrnlmp.exe
De meest recente versie staat doorgaans in sp3.cab (sp2.cab voor Windows 2003) onder \Windows\Driver Cache\i386. Als je alle Windowsupdates hebt geinstalleerd dan kan het ook zijn dat er een meer recente versie in deze folder aanwezig is buiten sp?.cab.
Voeg /detecthal toe aan je boot.ini, bijvoorbeeld:
• Start de computer op in WinRE (Windows Vista/7 DVD plaatsen)
• Shift-F10 drukken of "Repair Your Computer", klik, klik, klik, Command Prompt (kies zelf wat je makkelijk vindt)
• Laad C:\Windows\system32\system32\default, kies als naam bijvoorbeeld DEF
• Cleartype: Ga naar HKLM\DEF\Control Panel\Desktop en verander FontSmoothingType naar 2
• Ander thema: Ga naar HKLM\DEF\Software\Microsoft\Windows\CurrentVersion\Policies; maak de Key "System" en maak daarin "SetVisualStyle" met inhoud "%WinDir%\Resources\Themes\Windows Classic.theme voor bijvoorbeeld het klassieke thema.
Cleartype wordt nu ook in de profielen NetworkService en LocalService geinstalleerd zodat het logon venster ook cleartype heeft.
• Laad C:\Windows\system32\system32\software, kies als naam bijvoorbeeld SOF
• Ga naar HKLM\SOF\Microsoft\Windows NT\CurrentVersion\ProfileList en verander ProfilesDirectory naar bijvoorbeeld C:\Users (de standaardwaarde van Vista/7).
• Laad C:\Windows\system32\system32\software, kies als naam bijvoorbeeld SOF
• Ga naar HKLM\SOF en maak de key BrowserChoice aan. Maak daarin DWORD "Enable" en laat de waarde op 0 staan.
Dit kan achteraf ook, maar als je de Software-hive toch al open hebt staan, dan kun je dit net zo goed nu al doen.
Je kunt in \Windows alle $NTUNINSTALL folders verwijderen. Dit kan gewoon vanuit Windows, deze files zijn niet in gebruik.
Ook kun je vele andere files verwijderen:
Hier is een voorbeeldscript welke je in de \Sysprep folder kunt plaatsen. Je kunt het dan uitvoeren vanuit WinRE/WinPE:
Tip: Als je de Administrator folder niet verwijdert dan worden deze instellingen door mini-setup verwerkt in een nieuw Default User Profile. Je kunt ook in je bron image een Default User Profile maken en je kunt in je WDS $OEM$ folders een NTUSER.DAT plaatsen.
• Start de computer op in WinRE (Windows Vista/7 DVD plaatsen) of in WinPE
• Shift-F10 drukken of "Repair Your Computer", klik, klik, klik, Command Prompt (kies zelf wat je makkelijk vindt)
• Start Regedit en ga op HKLM staan. Kies File, Load Hive.
• Laad C:\Windows\system32\system32\system, kies als naam bijvoorbeeld SYS
De volgende hives kun je verwijderen:
• HKLM\SYS\ControlSet002: Volledig, onder HKLM\SYS\Select de waarde LastKnownGood wijzigen naar 1
• HKLM\SYS\WPA: Volledig, echter bij Windows Fundamentals en MediaCenter de keys Fundamentals en MediaCenter wel laten staan
• HKLM\SYS\MountedDevices: Volledig, wordt door Sysprep al verwijderd
• HKLM\SYS\LastKnownGoodRecovery: Volledig
• HKLM\SYS\Enum: Volledig, behalve de keys Root\LEGACY, Root\MEDIA, Root\MS*, Root\RDP*, Root\SYSTEM, Root\RAMDISK (voor Fundamentals), en SW.
• HKLM\SYS\Hardware Profiles: Alleen alle subkeys
• HKLM\SYS\ControlSet001\Control\Class: De keys {*} allemaal laten staan, alleen de subkeys in de {*} keys verwijderen behalve in de volgende keys:
{4D36E97D-E325-11CE-BFC1-08002BE10318}
{4D36E966-E325-11CE-BFC1-08002BE10318}
{4D36E96C-E325-11CE-BFC1-08002BE10318}
{4D36E972-E325-11CE-BFC1-08002bE10318}
{4D36E97D-E325-11CE-BFC1-08002BE10318}
{9D6D66A6-0B0C-4563-9077-A0E9A7955AE4}
• HKLM\SYS\ControlSet001\Control\DeviceClassesClass: Alle subfolders behalve *ROOT* en *SW*. De {*} keys zelf wel laten staan.
• Start de computer op in WinRE (Windows Vista/7 DVD plaatsen)
• Shift-F10 drukken of "Repair Your Computer", klik, klik, klik, Command Prompt (kies zelf wat je makkelijk vindt)
• Kopieer imagex.exe die eerder in \Sysprep is geplaatst van C:\Sysprep naar X:\
• Maak een image, bijvoorbeeld: imagex /compress maximum /capture C: C:\WindowsXP.wim "Windows XP Professional Edition"
• Kopieer de .wim file naar je WDS. Bijvoorbeeld door je virtual disk te mounten of door gewoon je systeem te rebooten, mini-setup te doorlopen en daarna de file via het netwerk te kopieren naar je server.
Je image is af. Je hebt nu een systeemonafhankelijk image voor zover er drivers voor massa opslag aanwezig zijn. Natuurlijk kun je ook Ghost of een ander imaging programma gebruiken om je image te deployen op andere systemen.
Windows Vista/7 32-bit boot.wim toont zowel 32- als 64-bit images in WDS 64-bit images worden alleen getoond als het doelsysteem 64-bit extensies ondersteunt.
De 64-bit boot.wim toont alleen 64-bit images en kan alleen worden opgestart als het doelsysteem 64-bit extensies ondersteunt.
De Vista boot.wim toont geen images die een andere kernel hebben. NT 5.x 3) ACPIAPIC_UP images worden niet getoond op een multiprocessor/multicore systeem.
De Windows 7 boot.wim toont wel images die een andere kernel hebben. NT 5.x ACPIAPIC_UP images worden wel getoond op een multiprocessor/multicore systeem.
Als je geen ACPIPIC systemen hebt binnen je organisatie en dus ook geen haldetectie hoeft te gebruiken dan verdient het voorkeur om een ACPIAPIC_UP image te maken en deze met de Windows 7 boot.wim te uitrollen. Dit omdat mini-setup zelf MP installeert zoals eerder vermeld. Er is overigens een update voor de WDS client van Windows Vista zodat UP images wel worden getoond op MP systemen.
Mount boot.wim en plaats winpeshl.ini met de volgende inhoud in de \Windows\system32 folder:
Andere walkthroughs op internet maken er e_isa_up van. Dit is onhandig want images van NT 5.x OS's met x64 extensies kunnen dan niet worden uitgerold omdat deze e_isa_up niet kennen (zie inleiding).
Als we er acpiapic_up van maken dan kunnen we wel 64-bits NT 5.x images uitrollen met de Windows 7 boot.wim. Boot.wim is dan nog steeds bootable op de niet-backwards compatible acpipic_up systemen omdat deze waarde pas wordt aangepast nadat WinPE is opgestart en voordat de WDS-client is opgestart. Het is wel van belang dat alle images dus met ACPIAPIC_UP worden gemaakt. One image for all
WDS haalt de HAL-type uit de volgende registersleutel:
HKLM\SYSTEM\ControlSet001\Control\Class\{4D36E966-E325-11CE-BFC1-08002BE10318}\0000
Eigenlijk is het niet de WDS-client die de registersleutel uitleest, het uitlezen gebeurt al tijdens het imagen door imagex en de HAL type wordt in de metadata van de wimfile opgeslagen. De WDS-client leest alleen de metadata van de .wim file uit.
3) Windows NT 5.x = Windows 2000 (NT 5.0), Windows XP (NT 5.1), Windows XP x64 (NT 5.2) en Windows 2003 (NT 5.2)
Het mooie aan NTLDR /detecthal is dat er eigenlijk geen registerwijzigingen nodig zijn aan het image. HAL detectie kan achteraf aan een bestaand image worden toegevoegd.
Op de DVD van Longhorn Beta 1 staat onder Sources het bestand INSTALL.WIM. Uit dit imagebestand heb je één bestand nodig: NTLDR. Dit bestand kun je eruit halen met imagex (zit bij de WAIK) of met 7-zip.
Plaats NTLDR op de juiste plaats in je $OEM$ folder. Stel dat je image in WDS in de groep "ImageGroup" staat onder de naam "Windows XP.wim", dan maak je de benodigde folders aan en plaats je NTLDR onder \RemoteInstall\Images\ImageGroup\Windows XP\$OEM$\$1\
Maak het bestand \RemoteInstall\Images\ImageGroup\Windows XP\$OEM$\$1\Windows\inf\dtecthal.inf aan met de volgende inhoud:
• hal.dll (hernoemen naar halstnd.dll), halacpi.dll, halapic.dll, halmacpi.dll, halmps.dll
• ntkrnlpa.exe, ntoskrnl.exe (hernoemen naar ntkrnlup.exe), ntkrpamp.exe, ntkrnlmp.exe
De meest recente versie staat doorgaans in sp3.cab (sp2.cab voor Windows 2003) onder \Windows\Driver Cache\i386. Als je alle Windowsupdates hebt geinstalleerd dan kan het ook zijn dat er een meer recente versie in deze folder aanwezig is buiten sp?.cab.
Kopieer het bestand boot.ini van je image naar \RemoteInstall\Images\ImageGroup\Windows XP\$OEM$\$1\ en voeg de /detecthal toe. Voorbeeld:
Je image blijft intact, maar tijdens het uitvoeren van WDS wordt de haldetectie toegevoegd. Op deze manier kun je haldetectie toevoegen aan je huidige images. Op onaangepaste images zal de originele HAL wel blijven staan in de device manager en zal de nieuwe HAL niet worden geinstalleerd, maar zolang /detecthal in boot.ini staat zal Windows met de juiste HAL opstarten. Het enige wat NTLDR namelijk doet is automatisch "eenmalig" de juiste HAL uitkiezen.
Een Flat image wordt direct vanaf media gedraaid, een Ramdisk image wordt daarentegen in het wergeheugen geladen voordat WinPE wordt gestart. Een Flat image heeft dus logischerwijs veel minder geheugen nodig.
Voordelen Flat:
• Draait al op systemen met 256 MB werkgeheugen (WinPE zelfs al op systemen met slechts 96 MB)
• Sneller te updaten met DISM / PEIMG voor bijvoorbeeld drivers (wim bestand hoeft niet te worden opengebroken)
• Start sneller op, mits access time van de drive laag is (bijv. harddisk of usb disk)
Nadelen Flat:
• Werkt langzamer omdat elke file van media moet worden geladen, i.t.t. ramdisk waarbij elke file al in het werkgeheugen staat
• Niet direct naar WDS te kopieren als boot image
• Werkt niet direct vanaf USB schijven. Zie dit stukje bij Troubleshooting voor een oplossing
Winsetup.dll in Boot.wim heeft echter een geheugencheck ingebouwd welke eerst moet worden verwijderd. Met een HEX editor (bijv. Notepad++) moet de waarde 77073D7801 worden gezocht en worden gewijzigd naar E904000000. De geheugencheck is dan verwijderd en een Flat Discover image kan dan worden gebruikt op systemen met minder dan 512 MB RAM.
Dit gedeelte volgt omdat ik nog wat bugs ben tegen gekomen.
• Sysprep verandert in HKLM\SYSTEM\Setup de waarde CmdLine naar "setup.exe -newsetup -mini" maar als je deze waarde verandert naar "setup.exe -newsetup" dan wordt de normale GUI-setup opnieuw uitgevoerd. Als Internet Explorer 8 (of wellicht 7) is geinstalleerd dan verloopt deze normale setup nogal problematisch. Waarschijnlijk is het mogelijk om te schakelen tussen versies (OEM, Retail en VLK) als de normale setup wordt uitgevoerd.
• Als je de productsleutel verwijdert uit het register dan wil mini-setup niet starten. Er verschijnt dan een lsass error. De normale GUI-setup kan na textmode setup wel opstarten zonder een ingestelde productsleutel. Ik wil de productsleutel verwijderen zodat een kwaadwillende gebruiker niet zomaar voordat mini-setup de productsleutel heeft gewijzigd de originele productsleutel kan achterhalen met bijvoorbeeld de Magische Jelly Bean. Er moet een mogelijkheid zijn om mini-setup te laten lopen zonder ingevoerde productsleutel zodat een kwaadwillende gebruiker niet de oorspronkelijke sleutel kan stelen.
• Windows Vista/7 hebben een Standaard AHCI driver, net zoals Windows XP een Standaard IDE driver heeft voor de nog niet verschenen AHCI controllers. Als deze standaarddriver in Windows XP kan worden gebouwd dan is Windows XP meteen compatible met toekomstige AHCI drives.
• Controleer of de verwijzingen naar de drivers in sysprep.inf wel correct zijn
Open met regedit \Windows\System32\config\SYSTEM naar bijvoorbeeld SYS;
Voor Windows Vista (werkt overigens ook op Windows 7):
Onder de volgende hives moet de DWORD "Start" van 3 naar 0 worden gewijzigd:
• HKLM\SYS\ControlSet001\services\usbehci
• HKLM\SYS\ControlSet001\services\usbhub
• HKLM\SYS\ControlSet001\services\usbohci
• HKLM\SYS\ControlSet001\services\USBSTOR
• HKLM\SYS\ControlSet001\services\usbuhci
Voor Windows 7:
• HKLM\SYS\ControlSet001\Control: BootDriverFlags, REG_DWORD: 6
• HKLM\SYS\ControlSet001\Control\PnP: PollBootPartitionTimeout, REG_DWORD: 30000 (decimal)
In de boot.wim van de Hyper-V Server 2008 R2 DVD zijn de bovenstaande wijzigingen al aangebracht.
Je Flat image kan na deze wijzigingen direct van USB opstarten.
De Vista methode zal op sommige systemen met een Intel Series 5 chipset problemen geven. In ieder geval geeft de Vista methode altijd problemen op de door mij geteste systemen met Intel Series 5 chipset. Het is dus raadzaam om altijd een boot.wim van Windows 7 te gebruiken en deze volgens de Windows 7 methode aan te passen als je dergelijke systemen gebruikt of verwacht te gebruiken. Zie hier voor meer informatie over dit probleem.
** Waarschuwing/Disclaimer **
Deze methode wordt niet ondersteund door Microsoft, is geheel op eigen risico en is af te raden in productie omgevingen.
Dat gezegd hebbende, werkt het bijna mij al tijden feilloos bij verschillende type machines.
Inhoud
InleidingBenodigdheden
Installeren van de bron-Windows
Mass Storage Drivers toevoegen
HAL-detectie toevoegen aan een image
Tweaks na textmode-setup en voor GUI-setup
Cleartype aanzetten en ander thema kiezen in default user profile en loginvenster
Documents en Folders hernoemen
Browserkeuzescherm verwijderen
Nutteloze tweak
Windows files opschonen na Sysprep om te imagen
Windows register opschonen na Sysprep om te imagen
Image maken
WDS boot image aanpassen
Klaar!
Extra's
De WDS-HAL-methode
Een Discover image flat maken
Achteraf mass-storage (boot)drivers toevoegen aan een image
To-Do list
Troubleshooting
Sysprep: "An error occured while trying to update..."
Mijn ...-software wil niet imagen
BSOD 0000007B bij Flat vanaf USB schijf
Inleiding
Dit topic gaat over het imagen van Windows XP en Windows 2003, zowel de 32-bits als de 64-bits (x64) editie. Itanium (IA64) wordt niet beschreven, maar na het lezen van dit topic kun je waarschijnlijk zelf Itanium images maken. Wel wordt Windows Fundamentals for Legacy PC's beschreven, want dat is bij uitstek het OS geschikt voor oudere PCs. Ook worden er enkele tweaks beschreven. Het imagen gaat uit van mini-setup en niet van oobesetup. Met enige kennis van oobesetup kun je zelf de informatie van deze walkthrough gebruiken om een oobesetup image te maken, zo veel veranderingen zijn er immers niet. Als er vraag naar is wil ik daar wel een addendum voor schrijven. Oobesetup ziet er voor de eindgebruiker immers gelikter uit.Voor het bouwen van een image dat op alle systemen werkt (mits binnen de specificaties) zijn er twee belemmeringen:
• HAL type
• Drivers voor massa opslag
Als deze twee belemmeringen worden opgelost dan heb je een volledig systeemonafhankelijk image.
Windows XP en Windows 2003 hebben diverse HAL's en kernels aan boord:
E_ISA_UP (pre-ACPI generieke computer)
MPS_UP (pre-ACPI single processor systeem, single processor kernel)
MPS_MP 1) (pre-ACPI systeem met multi processor kernel)
ACPIPIC_UP (ACPI PIC Uniprocessor)
ACPIAPIC_UP (ACPI Advanced PIC HAL en Uniprocessor kernel)
ACPIAPIC_MP 1) (ACPI Advanced PIC HAL en Multiprocessor kernel)
Windows XP x64 en Windows 2003 x64 kennen slechts één HAL type:
ACPIAPIC_UP
ACPIAPIC_MP 1)
1) zelfde HAL, wel andere (multiprocessor) kernel
Bovenstaande HAL types zijn allemaal backwards compatible maar niet upwards compatible. ACPIAPIC_MP systemen kunnen dus opstarten met een ACPIPIC_UP HAL of zelfs met een E_ISA_UP HAL.
Een kernel is behalve downwards ook upwards compatible. Een singleprocessor systeem kan opstarten met een multiprocessor kernel. Windows is in staat om, als de geinstalleerde HAL van het type ACPIAPIC is, de kernel van UP naar MP te installeren. Andersom niet: Als de kernel MP was en je start op in een single processor (of single core) omgeving, dan blijft de kernel op MP staan.
De x64 versies van Windows kennen alleen de ACPIAPIC HAL en omdat Windows de MP kernel installeert wanneer er multiprocessor wordt gedetecteerd, is het bij de x64 versies alleen nodig om een UP image te maken.
Dan blijft bij Windows XP en Windows 2003 het probleem dat oudere machines doorgaans nog gebruik maken van de ACPIPIC HAL. Veel zijn het er niet meer. Alle nieuw verkochte PCs zijn ACPIAPIC compatible. In het tweedehands circuit of bij nonprofit instellingen komen deze machines nog voor. Als je dus alleen moderne computers hebt dan volstaat een ACPIAPIC_UP image, ook als alle systemen MP zijn.
Ook is er nog E_ISA en MPS. Deze HAL types zul je niet tegenkomen op Windows XP machines, simpelweg omdat vrijwel alle PCs sinds januari 1999 ACPI compatible zijn. Bij E_ISA_UP moet je denken aan de Pentium I en bij MPS_UP/MP aan de Pentium Pro. WinPE 2.0 ondersteunt E_ISA en MPS overigens niet eens, deze machines kunnen dus niet middels WDS worden uitgerold. Wel zal in deze walkthrough de support worden ingebouwd in het image. Met wat tweaks kun je wellicht de Windows 7 setup draaien vanuit WinPE 1.x, iets wat nog op mijn experiment-todo-lijstje staat.
Benodigdheden
Hardware en software:• Een ACPIAPIC bron PC met 1 processor en 1 core (liefst een virtualisatiehost ivm snapshots)
• Windows XP met minimaal service Pack 2 (of Windows 2003 met minimaal Service Pack 1)
• Sysprep: staat op de Windows XP CD-ROM onder SUPPORT
• Windows Longhorn Beta 1: Dit wordt een moeilijke. Deze is niet meer te downloaden en hij is niet meer te gebruiken (betaperiode expired). Op dit moment staat hij in de binaries. Met een goede payserver kun je hem nu nog downloaden.
• WinRE: Windows Recovery Environment, gewoon de Windows Vista of Windows 7 install DVD dus
• Windows Vista/7 32-bit DVD
• WAIK
Kennis:
• Basiskennis van WDS en WAIK
• Basiskennis Sysprep
Installeren van de bron-Windows
• Indien VMware: 1 core, 1 processor• Plaats de Windows XP/2003/XPx64/2003x64 CD-ROM en start de installatie
• Bij het F6-scherm druk je op F5 om de HAL te selecteren: ACPI Uniprocessor PC (ACPIAPIC_UP)
• Indien nodig F6 om de LSI1068 (voor VMware) drivers of andere drivers te laden
Na de textmode setup kun je nog wat tweaks doen om Windows "netjes" te maken. Deze tweaks kun je overslaan, maar als je perse wilt tweaken, lees dan bij Tweaks na textmode-setup en voor GUI-setup voor enkele tweaks.
• Installeer Windows zoals gebruikelijk en laat het Administrator wachtwoord leeg (omdat mini-setup "Enter" interpreteert als niet-wijzigen ipv leegmaken)
• Gebruik de standaardinstellingen (dus standaardwaarde voor landcodes, toetsenbordcodes, dat kan allemaal later tijdens mini-setup)
• Kopieer de Windows XP/2003 CD-ROM naar C:\Sources (of een andere zelfgekozen folder)
• Zoek in het register naar "D:\" en vervang deze door "C:\Sources\" (en D:\I386 naar C:\Sources\I386 en D:\AMD64 naar C:\Sources\AMD64)
• Installeer updates, software (bijv. Office), etc.
• Plaats sysprep.exe en setupcl.exe in de C:\Sysprep folder
• Plaats de 32-bit versie van imagex.exe van de WAIK in de C:\Sysprep folder
• Maak een sysprep.inf aan. Een voorbeeld van de inhoud:
code:
Waarom OemSkipEula en OemSkipWelcome?1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| [Unattended] OemSkipEula=Yes InstallFilesPath=C:\Sources OemPnPDriversPath=Drivers\00;Drivers\01;Drivers\02;Drivers\03;Drivers\04;Drivers\05;Drivers\06;Drivers\07;Drivers\08;Drivers\09;Drivers\0A;Drivers\0B;Drivers\0C;Drivers\0D;Drivers\0E;Drivers\0F;Drivers\10;Drivers\11;Drivers\12;Drivers\13;Drivers\14;Drivers\15;Drivers\16;Drivers\17;Drivers\18;Drivers\19;Drivers\1A;Drivers\1B;Drivers\1C;Drivers\1D;Drivers\1E;Drivers\1F;Drivers\20;Drivers\21;Drivers\22;Drivers\23;Drivers\24;Drivers\25;Drivers\26;Drivers\27;Drivers\28;Drivers\29;Drivers\2A;Drivers\2B;Drivers\2C;Drivers\2D;Drivers\2E;Drivers\2F;Drivers\30;Drivers\31;Drivers\32;Drivers\33;Drivers\34;Drivers\35;Drivers\36;Drivers\37;Drivers\38;Drivers\39;Drivers\3A;Drivers\3B;Drivers\3C;Drivers\3D;Drivers\3E;Drivers\3F;Drivers\40;Drivers\41;Drivers\42;Drivers\43;Drivers\44;Drivers\45;Drivers\46;Drivers\47;Drivers\48;Drivers\49;Drivers\4A;Drivers\4B;Drivers\4C;Drivers\4D;Drivers\4E;Drivers\4F;Drivers\50;Drivers\51;Drivers\52;Drivers\53;Drivers\54;Drivers\55;Drivers\56;Drivers\57;Drivers\58;Drivers\59;Drivers\5A;Drivers\5B;Drivers\5C;Drivers\5D;Drivers\5E;Drivers\5F;Drivers\60;Drivers\61;Drivers\62;Drivers\63;Drivers\64;Drivers\65;Drivers\66;Drivers\67;Drivers\68;Drivers\69;Drivers\6A;Drivers\6B;Drivers\6C;Drivers\6D;Drivers\6E;Drivers\6F;Drivers\70;Drivers\71;Drivers\72;Drivers\73;Drivers\74;Drivers\75;Drivers\76;Drivers\77;Drivers\78;Drivers\79;Drivers\7A;Drivers\7B;Drivers\7C;Drivers\7D;Drivers\7E;Drivers\7F OemPreInstall=Yes DriverSigningPolicy=Ignore UpdateInstalledDrivers=Yes [GuiUnattended] OemSkipWelcome=1 [UserData] ProductKey=xxxxx-xxxxx-xxxxx-xxxxx-xxxxx [Sysprep] BuildMassStorageSection=yes [SysPrepMassStorage] |
Zodat je niet op de Enter toets hoeft te drukken om de hardwaredetectie te starten. Soms werkt een toetsenbord nog niet omdat de drivers wellicht nog niet zijn geinstalleerd, zo hoeft de gebruiker niet langer te wachten. Natuurlijk kun je deze ook overslaan, voor zover dit van Microsoft mag.
Waarom OemPnpDriversPath zo lang met niet-bestaande folders?
Zodat je achteraf drivers kunt toevoegen aan WDS zonder dat je het image hoeft open te breken. Je kunt er nog meer folders aan toevoegen, maar let op de limiet. Je kunt prima niet-bestaande folders toevoegen omdat je die bijvoorbeeld later toevoegt aan WDS.
Kan Drivers ook onder Sysprep ipv de root?
Jazeker. In veel gevallen is de driverfolder toch overbodig na mini-setup. Dan wordt het Sysprep\Drivers\00;... in plaats van Drivers\00;... in sysprep.inf
De driverfolder wordt dan na mini-setup verwijderd omdat mini-setup de hele sysprep folder verwijdert. Sommige Intel GMA videodrivers hebben een bug waardoor een bestand in gebruik blijft waardoor na mini-setup de folder Sysprep en de subfolders van de Intel GMA drivers blijven bestaan. Die moeten na mini-setup handmatig worden verwijderd.
Mass Storage Drivers toevoegen
Eerst gaan we standaard ondersteunde mass storage drivers aanmaken in sysprep.inf.• Controleer of "BuildMassStorageSection=yes" aanwezig is in sysprep.inf
• Voer het volgende commando uit vanuit de Sysprep folder: sysprep -bmsd
• Verander "BuildMassStorageSection=yes" naar "BuildMassStorageSection=no" in sysprep.inf
• Alleen voor Windows XP 32-bit: verwijder uit sysprep.inf de regel "PCI\VEN_104B&DEV_1040=C:\Windows\inf\scsi.inf" 2)
2) DEV_1040 moet worden verwijderd vanwege een bug. Deze driverfile ontbreekt namelijk in Windows XP terwijl de inf file er wel is (overblijfsel uit Windows 2000). De bug geeft alleen problemen als je de vmscsi of buslogic drivers wilt toevoegen, je kunt deze stap dus overslaan.
Nu kun je zelf Mass Storage Drivers toevoegen. Ik geef een voorbeeld aan de hand van de IASTOR drivers (Intel AHCI Drivers). Dit voorbeeld gaat er vanuit dat de Intel AHCI Drivers in C:\Drivers\00 staan.
In iaahci.inf (of andere .inf files) vind je regels die hier op lijken:
code:
1
2
| PCI\VEN_8086&DEV_2821&CC_0106.DeviceDesc = "Intel(R) ICH8R/DH/DO SATA AHCI Controller" PCI\VEN_8086&DEV_2829&CC_0106.DeviceDesc = "Intel(R) ICH8M-E/M SATA AHCI Controller" |
Voor elk apparaat in de .inf file plaats je het gedeelte PCI\VEN.....CC_0106 in de sysprep.inf en verwijs je naar de .inf file. Bijvoorbeeld:
code:
Plaats informatie van alle .inf files. De IASTOR drivers staan niet alleen in iaahci.inf maar ook in iastor.inf.1
2
3
4
5
| [SysPrepMassStorage] <hele rits drivers toegevoegd door sysprep -bmsd> PCI\VEN_8086&DEV_2821&CC_0106=C:\Drivers\00\iaahci.inf PCI\VEN_8086&DEV_2829&CC_0106=C:\Drivers\00\iaahci.inf <en al die andere regels van iaahci.inf> |
Verder moet je van elke mass storage driver ook de .sys files toevoegen aan C:\Sources, ook al heb je de Windows files wellicht in C:\Sources\I386 / AMD64 staan. Mini-setup zoekt de driver.sys in de lokatie van InstallFilesPath in Sysprep.inf. In het bovenstaande voorbeeld komt de file IASTOR.SYS dus in C:\Sources te staan. Andere files zal mini-setup alsnog blijven zoeken in C:\Sources\I386 / AMD64 waardoor het pad in sysprep.inf toch gewoon correct is.
Sysprep zal tijdens z'n bewerkingen een hele rits services toevoegen aan de bootservices van Windows zodat Windows ook kan opstarten met de niet-geinstalleerde drivers. De driver zelf wordt nog niet geinstalleerd. Voor niet-ondertekende drivers is het wellicht makkelijk om in de Local Security Policy/Security Options het installeren van niet-ondertekende drivers automatisch toe te staan. Dit omdat sysprep anders een hele zooi meldingen geeft tijdens z'n bewerkingen.
Als je Windows hebt geinstalleerd binnen je virtualisatiehost met de LSI1068 adapter, dan is het raadzaam om de LSI1068 drivers ook in je image te verwerken zodat je in je virtuele omgeving kunt testen met je image.
HAL-detectie toevoegen aan een image
(alleen voor 32-bit)Het inbouwen van HAL-detectie kun je overslaan als in je organisatie alleen ACPIAPIC systemen draaien of als je image niet compatible hoeft te zijn met ACPIPIC. Wil je achteraf ACPIPIC inbouwen, dan kan dat eventueel ook middels de WDS-HAL-methode. Deze methode beschrijf ik verderop. HAL-detectie is voor x64 images niet nodig. Ook als je niet aan de Longhorn Beta 1 DVD kunt komen dan hoef je HAL-detectie niet in te bouwen. Je image is dan echter niet compatible met ACPIPIC.
Op de DVD van Longhorn Beta 1 staat onder Sources het bestand INSTALL.WIM. Uit dit imagebestand heb je één bestand nodig: NTLDR. Dit bestand kun je eruit halen met imagex (zit bij de WAIK) of met 7-zip. Vervang NTLDR (in de root folder) van je image door deze NTLDR.
Maak het bestand \Windows\inf\dtecthal.inf aan met de volgende inhoud:
code:
Installeren van de file is niet nodig.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| [Version] signature="$Windows NT$" DriverVer=07/01/2001 [hal] MPS_MP = halmps.dll MPS_UP = halapic.dll E_ISA_UP = halstnd.dll ACPIPIC_UP = halacpi.dll ACPIAPIC_UP = halaacpi.dll ACPIAPIC_MP = halmacpi.dll [ACPIOptions] ACPIEnable = 2 ACPIBiosDate = 01,01,1999 |
Plaats de meest recente versies van deze files in de \Windows\system32 folder:
• hal.dll (hernoemen naar halstnd.dll), halacpi.dll, halapic.dll, halmacpi.dll, halmps.dll
• ntkrnlpa.exe, ntoskrnl.exe (hernoemen naar ntkrnlup.exe), ntkrpamp.exe, ntkrnlmp.exe
De meest recente versie staat doorgaans in sp3.cab (sp2.cab voor Windows 2003) onder \Windows\Driver Cache\i386. Als je alle Windowsupdates hebt geinstalleerd dan kan het ook zijn dat er een meer recente versie in deze folder aanwezig is buiten sp?.cab.
Voeg /detecthal toe aan je boot.ini, bijvoorbeeld:
code:
1
2
3
4
5
| [boot loader] timeout=0 default=multi(0)disk(0)rdisk(0)partition(1)\Windows [operating systems] multi(0)disk(0)rdisk(0)partition(1)\Windows="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /detecthal |
Tweaks na textmode-setup en voor GUI-setup
Deze tweaks kunnen alleen na textmode, voordat de GUI-setup is gestart. Dit heeft te maken met het feit dat Windows wordt opgebouwd op basis van deze instellingen. Tweaks kunnen ook worden gedaan door simpelweg de Windows CD aan te passen, ik vind deze stappen persoonlijk gemakkelijker.• Start de computer op in WinRE (Windows Vista/7 DVD plaatsen)
• Shift-F10 drukken of "Repair Your Computer", klik, klik, klik, Command Prompt (kies zelf wat je makkelijk vindt)
Cleartype aanzetten en ander thema kiezen in default user profile en loginvenster
• Start Regedit en ga op HKLM staan. Kies File, Load Hive.• Laad C:\Windows\system32\system32\default, kies als naam bijvoorbeeld DEF
• Cleartype: Ga naar HKLM\DEF\Control Panel\Desktop en verander FontSmoothingType naar 2
• Ander thema: Ga naar HKLM\DEF\Software\Microsoft\Windows\CurrentVersion\Policies; maak de Key "System" en maak daarin "SetVisualStyle" met inhoud "%WinDir%\Resources\Themes\Windows Classic.theme voor bijvoorbeeld het klassieke thema.
Cleartype wordt nu ook in de profielen NetworkService en LocalService geinstalleerd zodat het logon venster ook cleartype heeft.
Documents en Folders hernoemen
• Start Regedit en ga op HKLM staan. Kies File, Load Hive.• Laad C:\Windows\system32\system32\software, kies als naam bijvoorbeeld SOF
• Ga naar HKLM\SOF\Microsoft\Windows NT\CurrentVersion\ProfileList en verander ProfilesDirectory naar bijvoorbeeld C:\Users (de standaardwaarde van Vista/7).
Browserkeuzescherm verwijderen
• Start Regedit en ga op HKLM staan. Kies File, Load Hive.• Laad C:\Windows\system32\system32\software, kies als naam bijvoorbeeld SOF
• Ga naar HKLM\SOF en maak de key BrowserChoice aan. Maak daarin DWORD "Enable" en laat de waarde op 0 staan.
Dit kan achteraf ook, maar als je de Software-hive toch al open hebt staan, dan kun je dit net zo goed nu al doen.
Nutteloze tweak
Sinds Windows Vista en 7 staat Windows in C:\Windows ipv C:\WINDOWS. Je kunt de folder \WINDOWS hernoemen naar \Windows. Als je in de BOOT.INI ook tweemaal \WINDOWS naar \Windows aanpast, dan zal Windows tijdens de GUI-setup dit ook in de parameters aanpassen naar \Windows. Pas je dit achteraf aan, dan blijft Windows de \Windows folder als \WINDOWS zien. Niet echt een nuttige tweak want NTFS is niet hoofdlettergevoelig, maar voor de perfectionisten onder ons is het wellicht een mooie tweak.Windows files opschonen na Sysprep om te imagen
Na het installeren van updates blijft er veel onnodig materiaal over.Je kunt in \Windows alle $NTUNINSTALL folders verwijderen. Dit kan gewoon vanuit Windows, deze files zijn niet in gebruik.
Ook kun je vele andere files verwijderen:
Hier is een voorbeeldscript welke je in de \Sysprep folder kunt plaatsen. Je kunt het dan uitvoeren vanuit WinRE/WinPE:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| @ECHO OFF RD /S /Q C:\ExchangeSetupLogs RD /S /Q C:\PFiles RD /S /Q C:\RECYCLER RD /S /Q C:\$RECYCLE.BIN RD /S /Q C:\Windows\Prefetch RD /S /Q C:\Windows\ie7updates RD /S /Q C:\Windows\ie8updates RD /S /Q C:\Windows\SoftwareDistribution RD /S /Q C:\Windows\Temp RD /S /Q C:\Windows\repair RD /S /Q C:\Windows\PCHEALTH\ERRORREP RD /S /Q C:\Windows\PCHEALTH\HelpCtr\OfflineCache RD /S /Q C:\Windows\Debug RD /S /Q C:\Windows\Provisioning RD /S /Q C:\Windows\Registration RD /S /Q C:\Users\Administrator RD /S /Q "C:\System Volume Information" ATTRIB C:\*.SQM -A -R -S -H DEL /Q C:\*.SQM ATTRIB c:\IO.SYS -A -R -S -H ATTRIB C:\MSDOS.SYS -A -R -S -H DEL C:\IO.SYS DEL C:\MSDOS.SYS DEL /Q C:\Windows\inf\*.pnf DEL /Q C:\Windows\*.log DEL /Q C:\Windows\*.txt DEL /Q C:\Windows\*.bak ATTRIB C:\Windows\*.tmp -A -R -S -H DEL /Q C:\Windows\*.tmp DEL /Q C:\Windows\system32\config\*.evt DEL /Q C:\Windows\system32\config\*.sav |
Tip: Als je de Administrator folder niet verwijdert dan worden deze instellingen door mini-setup verwerkt in een nieuw Default User Profile. Je kunt ook in je bron image een Default User Profile maken en je kunt in je WDS $OEM$ folders een NTUSER.DAT plaatsen.
Windows register opschonen na Sysprep om te imagen
Wil je alle hardware referenties van je bron-systeem verwijderen dan kun je dit vanuit WinRE/WinPE doen.• Start de computer op in WinRE (Windows Vista/7 DVD plaatsen) of in WinPE
• Shift-F10 drukken of "Repair Your Computer", klik, klik, klik, Command Prompt (kies zelf wat je makkelijk vindt)
• Start Regedit en ga op HKLM staan. Kies File, Load Hive.
• Laad C:\Windows\system32\system32\system, kies als naam bijvoorbeeld SYS
De volgende hives kun je verwijderen:
• HKLM\SYS\ControlSet002: Volledig, onder HKLM\SYS\Select de waarde LastKnownGood wijzigen naar 1
• HKLM\SYS\WPA: Volledig, echter bij Windows Fundamentals en MediaCenter de keys Fundamentals en MediaCenter wel laten staan
• HKLM\SYS\MountedDevices: Volledig, wordt door Sysprep al verwijderd
• HKLM\SYS\LastKnownGoodRecovery: Volledig
• HKLM\SYS\Enum: Volledig, behalve de keys Root\LEGACY, Root\MEDIA, Root\MS*, Root\RDP*, Root\SYSTEM, Root\RAMDISK (voor Fundamentals), en SW.
• HKLM\SYS\Hardware Profiles: Alleen alle subkeys
• HKLM\SYS\ControlSet001\Control\Class: De keys {*} allemaal laten staan, alleen de subkeys in de {*} keys verwijderen behalve in de volgende keys:
{4D36E97D-E325-11CE-BFC1-08002BE10318}
{4D36E966-E325-11CE-BFC1-08002BE10318}
{4D36E96C-E325-11CE-BFC1-08002BE10318}
{4D36E972-E325-11CE-BFC1-08002bE10318}
{4D36E97D-E325-11CE-BFC1-08002BE10318}
{9D6D66A6-0B0C-4563-9077-A0E9A7955AE4}
• HKLM\SYS\ControlSet001\Control\DeviceClassesClass: Alle subfolders behalve *ROOT* en *SW*. De {*} keys zelf wel laten staan.
Image maken
Eindelijk aangekomen bij het maken van een image. Je kunt een image maken door middel van een capture image, maar je kunt ook gewoon imagex gebruiken. Ik gebruik liever imagex.• Start de computer op in WinRE (Windows Vista/7 DVD plaatsen)
• Shift-F10 drukken of "Repair Your Computer", klik, klik, klik, Command Prompt (kies zelf wat je makkelijk vindt)
• Kopieer imagex.exe die eerder in \Sysprep is geplaatst van C:\Sysprep naar X:\
• Maak een image, bijvoorbeeld: imagex /compress maximum /capture C: C:\WindowsXP.wim "Windows XP Professional Edition"
• Kopieer de .wim file naar je WDS. Bijvoorbeeld door je virtual disk te mounten of door gewoon je systeem te rebooten, mini-setup te doorlopen en daarna de file via het netwerk te kopieren naar je server.
Je image is af. Je hebt nu een systeemonafhankelijk image voor zover er drivers voor massa opslag aanwezig zijn. Natuurlijk kun je ook Ghost of een ander imaging programma gebruiken om je image te deployen op andere systemen.
WDS boot image aanpassen
De laatste aanpassing is nodig in WDS. Boot.wim kijkt welk type HAL aanwezig is, en laat alleen de images zien die overeenkomen met de gedetecteerde HAL.Windows Vista/7 32-bit boot.wim toont zowel 32- als 64-bit images in WDS 64-bit images worden alleen getoond als het doelsysteem 64-bit extensies ondersteunt.
De 64-bit boot.wim toont alleen 64-bit images en kan alleen worden opgestart als het doelsysteem 64-bit extensies ondersteunt.
De Vista boot.wim toont geen images die een andere kernel hebben. NT 5.x 3) ACPIAPIC_UP images worden niet getoond op een multiprocessor/multicore systeem.
De Windows 7 boot.wim toont wel images die een andere kernel hebben. NT 5.x ACPIAPIC_UP images worden wel getoond op een multiprocessor/multicore systeem.
Als je geen ACPIPIC systemen hebt binnen je organisatie en dus ook geen haldetectie hoeft te gebruiken dan verdient het voorkeur om een ACPIAPIC_UP image te maken en deze met de Windows 7 boot.wim te uitrollen. Dit omdat mini-setup zelf MP installeert zoals eerder vermeld. Er is overigens een update voor de WDS client van Windows Vista zodat UP images wel worden getoond op MP systemen.
Mount boot.wim en plaats winpeshl.ini met de volgende inhoud in de \Windows\system32 folder:
code:
Unmount je boot image en plaats deze terug in de WDS folder.1
2
3
| [LaunchApps] %SYSTEMDRIVE%\Windows\System32\reg.exe,"add HKLM\SYSTEM\CurrentControlSet\Enum\Root\ACPI_HAL\0000 /v HardwareID /t REG_MULTI_SZ /d acpiapic_up /f" %SYSTEMDRIVE%\Sources\Setup.exe,"/wds /wdsdiscover" |
Andere walkthroughs op internet maken er e_isa_up van. Dit is onhandig want images van NT 5.x OS's met x64 extensies kunnen dan niet worden uitgerold omdat deze e_isa_up niet kennen (zie inleiding).
Als we er acpiapic_up van maken dan kunnen we wel 64-bits NT 5.x images uitrollen met de Windows 7 boot.wim. Boot.wim is dan nog steeds bootable op de niet-backwards compatible acpipic_up systemen omdat deze waarde pas wordt aangepast nadat WinPE is opgestart en voordat de WDS-client is opgestart. Het is wel van belang dat alle images dus met ACPIAPIC_UP worden gemaakt. One image for all
WDS haalt de HAL-type uit de volgende registersleutel:
HKLM\SYSTEM\ControlSet001\Control\Class\{4D36E966-E325-11CE-BFC1-08002BE10318}\0000
Eigenlijk is het niet de WDS-client die de registersleutel uitleest, het uitlezen gebeurt al tijdens het imagen door imagex en de HAL type wordt in de metadata van de wimfile opgeslagen. De WDS-client leest alleen de metadata van de .wim file uit.
3) Windows NT 5.x = Windows 2000 (NT 5.0), Windows XP (NT 5.1), Windows XP x64 (NT 5.2) en Windows 2003 (NT 5.2)
Klaar!
En klaar is je image en je WDS boot image. Je hebt nu een HAL onafhankelijk image welke je op een grote hoeveelheid systemen kunt uitrollen.Extra's
De WDS-HAL-methode
(alleen voor 32-bit)Het mooie aan NTLDR /detecthal is dat er eigenlijk geen registerwijzigingen nodig zijn aan het image. HAL detectie kan achteraf aan een bestaand image worden toegevoegd.
Op de DVD van Longhorn Beta 1 staat onder Sources het bestand INSTALL.WIM. Uit dit imagebestand heb je één bestand nodig: NTLDR. Dit bestand kun je eruit halen met imagex (zit bij de WAIK) of met 7-zip.
Plaats NTLDR op de juiste plaats in je $OEM$ folder. Stel dat je image in WDS in de groep "ImageGroup" staat onder de naam "Windows XP.wim", dan maak je de benodigde folders aan en plaats je NTLDR onder \RemoteInstall\Images\ImageGroup\Windows XP\$OEM$\$1\
Maak het bestand \RemoteInstall\Images\ImageGroup\Windows XP\$OEM$\$1\Windows\inf\dtecthal.inf aan met de volgende inhoud:
code:
Plaats de meest recente versies van deze files in de \RemoteInstall\Images\ImageGroup\Windows XP\$OEM$\$1\Windows\system32 folder:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| [Version] signature="$Windows NT$" DriverVer=07/01/2001 [hal] MPS_MP = halmps.dll MPS_UP = halapic.dll E_ISA_UP = halstnd.dll ACPIPIC_UP = halacpi.dll ACPIAPIC_UP = halaacpi.dll ACPIAPIC_MP = halmacpi.dll [ACPIOptions] ACPIEnable = 2 ACPIBiosDate = 01,01,1999 |
• hal.dll (hernoemen naar halstnd.dll), halacpi.dll, halapic.dll, halmacpi.dll, halmps.dll
• ntkrnlpa.exe, ntoskrnl.exe (hernoemen naar ntkrnlup.exe), ntkrpamp.exe, ntkrnlmp.exe
De meest recente versie staat doorgaans in sp3.cab (sp2.cab voor Windows 2003) onder \Windows\Driver Cache\i386. Als je alle Windowsupdates hebt geinstalleerd dan kan het ook zijn dat er een meer recente versie in deze folder aanwezig is buiten sp?.cab.
Kopieer het bestand boot.ini van je image naar \RemoteInstall\Images\ImageGroup\Windows XP\$OEM$\$1\ en voeg de /detecthal toe. Voorbeeld:
code:
1
2
3
4
5
| [boot loader] timeout=0 default=multi(0)disk(0)rdisk(0)partition(1)\Windows [operating systems] multi(0)disk(0)rdisk(0)partition(1)\Windows="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /detecthal |
Je image blijft intact, maar tijdens het uitvoeren van WDS wordt de haldetectie toegevoegd. Op deze manier kun je haldetectie toevoegen aan je huidige images. Op onaangepaste images zal de originele HAL wel blijven staan in de device manager en zal de nieuwe HAL niet worden geinstalleerd, maar zolang /detecthal in boot.ini staat zal Windows met de juiste HAL opstarten. Het enige wat NTLDR namelijk doet is automatisch "eenmalig" de juiste HAL uitkiezen.
Een Discover image flat maken
Een Discover image wordt gebruikt wanneer je systeem geen PXE-boot maar wel El Torito of USB-boot ondersteunt. Wil je puur met El Torito werken, dan hoef je geen wijzigingen aan te brengen aan de SYSTEM hive. Wil je vanaf USB booten, dan moeten er wel enkele wijzigingen worden gemaakt.Een Flat image wordt direct vanaf media gedraaid, een Ramdisk image wordt daarentegen in het wergeheugen geladen voordat WinPE wordt gestart. Een Flat image heeft dus logischerwijs veel minder geheugen nodig.
Voordelen Flat:
• Draait al op systemen met 256 MB werkgeheugen (WinPE zelfs al op systemen met slechts 96 MB)
• Sneller te updaten met DISM / PEIMG voor bijvoorbeeld drivers (wim bestand hoeft niet te worden opengebroken)
• Start sneller op, mits access time van de drive laag is (bijv. harddisk of usb disk)
Nadelen Flat:
• Werkt langzamer omdat elke file van media moet worden geladen, i.t.t. ramdisk waarbij elke file al in het werkgeheugen staat
• Niet direct naar WDS te kopieren als boot image
• Werkt niet direct vanaf USB schijven. Zie dit stukje bij Troubleshooting voor een oplossing
Winsetup.dll in Boot.wim heeft echter een geheugencheck ingebouwd welke eerst moet worden verwijderd. Met een HEX editor (bijv. Notepad++) moet de waarde 77073D7801 worden gezocht en worden gewijzigd naar E904000000. De geheugencheck is dan verwijderd en een Flat Discover image kan dan worden gebruikt op systemen met minder dan 512 MB RAM.
Achteraf mass-storage (boot)drivers toevoegen aan een image
Met Windows Vista/7 kun je met dism drivers offline toevoegen aan een bestaand image. Dit kan echter ook met Windows XP/2003, alleen vereist het iets meer werk. Dism wordt niet gebruikt en je zal alles met regedit moeten doen. In dit voorbeeld wordt de LSI1068 driver toegevoegd (o.a. de VMware SAS controller)Dit gedeelte volgt omdat ik nog wat bugs ben tegen gekomen.
To-Do list
Zaken waarmee ik nog aan het experimenteren ben of die ik nog wil proberen. Als iemand hier ervaring mee heeft, dan hoor ik het graag.• Sysprep verandert in HKLM\SYSTEM\Setup de waarde CmdLine naar "setup.exe -newsetup -mini" maar als je deze waarde verandert naar "setup.exe -newsetup" dan wordt de normale GUI-setup opnieuw uitgevoerd. Als Internet Explorer 8 (of wellicht 7) is geinstalleerd dan verloopt deze normale setup nogal problematisch. Waarschijnlijk is het mogelijk om te schakelen tussen versies (OEM, Retail en VLK) als de normale setup wordt uitgevoerd.
• Als je de productsleutel verwijdert uit het register dan wil mini-setup niet starten. Er verschijnt dan een lsass error. De normale GUI-setup kan na textmode setup wel opstarten zonder een ingestelde productsleutel. Ik wil de productsleutel verwijderen zodat een kwaadwillende gebruiker niet zomaar voordat mini-setup de productsleutel heeft gewijzigd de originele productsleutel kan achterhalen met bijvoorbeeld de Magische Jelly Bean. Er moet een mogelijkheid zijn om mini-setup te laten lopen zonder ingevoerde productsleutel zodat een kwaadwillende gebruiker niet de oorspronkelijke sleutel kan stelen.
• Windows Vista/7 hebben een Standaard AHCI driver, net zoals Windows XP een Standaard IDE driver heeft voor de nog niet verschenen AHCI controllers. Als deze standaarddriver in Windows XP kan worden gebouwd dan is Windows XP meteen compatible met toekomstige AHCI drives.
Troubleshooting
Sysprep zegt "An error occured while trying to update your registry. Unable to continue."
• Controleer of de folder \Windows\repair niet ontbreekt (folder mag leeg zijn maar moet wel aanwezig zijn)• Controleer of de verwijzingen naar de drivers in sysprep.inf wel correct zijn
Mijn virusscanner (of andere software) wil niet imagen
Virusscanner kun je installeren tijdens mini-setup door het GuiRunOnce commando. Virusscanners moeten niet in het bron image worden geinstalleerd.Mijn Windows PE, Windows Setup Discover of Windows RE Flat image geeft BSOD 0000007B als ik deze start vanaf een USB schijf
De USB services zijn uitgeschakeld in je SYSTEM hive. Omdat deze services bij boottime niet worden gestart verliest Windows de verbinding met USB devices waardoor het niet verder kan booten. De services moeten dus handmatig worden ingeschakeld.Open met regedit \Windows\System32\config\SYSTEM naar bijvoorbeeld SYS;
Voor Windows Vista (werkt overigens ook op Windows 7):
Onder de volgende hives moet de DWORD "Start" van 3 naar 0 worden gewijzigd:
• HKLM\SYS\ControlSet001\services\usbehci
• HKLM\SYS\ControlSet001\services\usbhub
• HKLM\SYS\ControlSet001\services\usbohci
• HKLM\SYS\ControlSet001\services\USBSTOR
• HKLM\SYS\ControlSet001\services\usbuhci
Voor Windows 7:
• HKLM\SYS\ControlSet001\Control: BootDriverFlags, REG_DWORD: 6
• HKLM\SYS\ControlSet001\Control\PnP: PollBootPartitionTimeout, REG_DWORD: 30000 (decimal)
In de boot.wim van de Hyper-V Server 2008 R2 DVD zijn de bovenstaande wijzigingen al aangebracht.
Je Flat image kan na deze wijzigingen direct van USB opstarten.
De Vista methode zal op sommige systemen met een Intel Series 5 chipset problemen geven. In ieder geval geeft de Vista methode altijd problemen op de door mij geteste systemen met Intel Series 5 chipset. Het is dus raadzaam om altijd een boot.wim van Windows 7 te gebruiken en deze volgens de Windows 7 methode aan te passen als je dergelijke systemen gebruikt of verwacht te gebruiken. Zie hier voor meer informatie over dit probleem.