Jump to content

Trouble Running VB script in PE 2.0


dkreifus

Recommended Posts

I am attempting to run a VB script in WinPE 2.0.

The script does not seem to respond in any way, shape, or form.

When it executes, no error messages pop up, it just displays the command prompt again.

Here is the script I use to create my WinPE image.

@echo off
setlocal
TITLE Making BootDisk 2.0
set winpe=C:\BootDisk\PE2.0\winpe2.0
set Petools=C:\Program Files\Windows AIK\Tools\PETools
set BootDisk=C:\BootDisk\PE2.0
echo Updating path to include peimg, oscdimg, imagex
echo.
echo %petools%
echo %petools%..\%PROCESSOR_ARCHITECTURE%
echo.
set PATH=%PATH%;%petools%;%petools%..\%PROCESSOR_ARCHITECTURE%
imagex /unmount %winpe%\mount
rd /s /q %winpe%
CALL copype.cmd x86 "%winpe%"
imagex /mountrw %winpe%\winpe.wim 1 %winpe%\mount
rename %winpe%\mount\Windows\System32\startnet.cmd startnet.cmd.old
ECHO Copying add on files
copy /y %bootdisk%\addon\*.* %winpe%\mount\Windows\System32
peimg /install=*scripting* %winpe%\mount\Windows
peimg /prep %winpe%\mount\Windows /f
imagex /capture /boot %winpe%\mount %winpe%\winpe1.wim "Boot CD"
copy %winpe%\winpe1.wim %winpe%\ISO\sources\boot.wim
oscdimg -n -b%winpe%\etfsboot.com %winpe%\ISO "%bootdisk%\Boot CD 2.3b.iso"
exit

The script I am trying to execute is:

'//////////////////////////////////////////////////
'//
'// Script File:
'//
'// ZTIHalDetect.vbs
'//
'// This script updates sysprep.inf with correct HAL Type
'// The Reference (master) computer should be built from
'// an Advanced ACPI computer
'//
'// Use this script for WIM images (Imagex, OSD, WDS)
'//
'//////////////////////////////////////////////////

Set oWshShell = CreateObject("WScript.Shell")
Set oFSO = CreateObject("Scripting.FileSystemObject")


' Customize the local sysprep.inf file based on the HAL type

Call UpdateSysprepinf ()

' Done, quit.

WScript.Quit

Sub UpdateSysprepinf ()

' Find out the HAL type

sHalType = oWshShell.RegRead("HKLM\SYSTEM\CurrentControlSet\Enum\Root\ACPI_HAL000\HardwareID")

If sHalType(0) = "acpiapic" Then

if oWshShell.Environment.item("NUMBER_OF_PROCESSORS") = 1 then

WriteIni "c:\sysprep\sysprep.inf", "Unattended", "UpdateUPHAL", "ACPIAPIC_UP,%WINDIR%\Inf\Hal.inf"
else
writeini "c:\sysprep\sysprep.inf", "Unattended", "UpdateHAL", "ACPIAPIC_MP,%WINDIR%\Inf\Hal.inf"

end if

ElseIf sHalType(0) = "acpiapic_up" Then

WriteIni "c:\sysprep\sysprep.inf", "Unattended", "UpdateUPHAL", "ACPIAPIC_UP,%WINDIR%\Inf\Hal.inf"

ElseIf sHalType(0) = "acpiapic_mp" Then

writeini "c:\sysprep\sysprep.inf", "Unattended", "UpdateHAL", "ACPIAPIC_MP,%WINDIR%\Inf\Hal.inf"

End if


End Sub

Function ReadIni(file, section, item)

ReadIni = ""
file = Trim(file)
item = Trim(item)
Set ini = oFSO.OpenTextFile( file, 1, True)

Do While ini.AtEndOfStream = False
line = ini.ReadLine
line = Trim(line)
If LCase(line) = "[" & LCase(section) & "]" Then
line = ini.ReadLine
line = Trim(line)
Do While Left( line, 1) <> "["
'If InStr( 1, line, item & "=", 1) = 1 Then
equalpos = InStr(1, line, "=", 1 )
If equalpos > 0 Then
leftstring = Left(line, equalpos - 1 )
leftstring = Trim(leftstring)
If LCase(leftstring) = LCase(item) Then
ReadIni = Mid( line, equalpos + 1 )
ReadIni = Trim(ReadIni)
Exit Do
End If
End If

If ini.AtEndOfStream Then Exit Do
line = ini.ReadLine
line = Trim(line)
Loop
Exit Do
End If
Loop
ini.Close

End Function

Sub WriteIni( file, section, item, myvalue )

in_section = False
section_exists = False
item_exists = ( ReadIni( file, section, item ) <> "" )
wrote = False
file = Trim(file)
itemtrimmed = Trim(item)
myvalue = Trim(myvalue)

temp_ini = oFSO.GetParentFolderName(file) & "\" & oFSO.GetTempName

Set read_ini = oFSO.OpenTextFile( file, 1, True, TristateFalse )
Set write_ini = oFSO.CreateTextFile( temp_ini, False)

While read_ini.AtEndOfStream = False
line = read_ini.ReadLine
linetrimmed = Trim(line)
If wrote = False Then
If LCase(line) = "[" & LCase(section) & "]" Then
section_exists = True
in_section = True
ElseIf InStr( line, "[" ) = 1 Then
in_section = False
End If
End If

If in_section Then
If item_exists = False Then
write_ini.WriteLine line
write_ini.WriteLine item & "=" & myvalue
wrote = True
in_section = False
Else
equalpos = InStr(1, line, "=", 1 )
If equalpos > 0 Then
leftstring = Left(line, equalpos - 1 )
leftstring = Trim(leftstring)
If LCase(leftstring) = LCase(item) Then
write_ini.WriteLine itemtrimmed & "=" & myvalue
wrote = True
in_section = False
End If
End If
If Not wrote Then
write_ini.WriteLine line
End If
End If
Else
write_ini.WriteLine line
End If
Wend

If section_exists = False Then ' section doesn't exist
write_ini.WriteLine
write_ini.WriteLine "[" & section & "]"
write_ini.WriteLine itemtrimmed & "=" & myvalue
End If

read_ini.Close
write_ini.Close
If oFSO.FileExists(file) then
oFSO.DeleteFile file, True
End if
oFSO.CopyFile temp_ini, file, true
oFSO.DeleteFile temp_ini, True

End Sub

Link to comment
Share on other sites


Try adding the WMI package. If that doesn't work, add WMI and XML. Should just be WMI though.

peimg /install=*WMI* %winpe%\mount\Windows

By the way, if you have any machines that are acpipic you will need to replace hal.dll and ntoskrnl.exe. The Windows boot screen stalls if you don't or you just get a blank screen. Oh and the master image should be taken from a ACPIAPIC_MP if you have one. The sysprep documentation is a little tricky in the wording of UpdateHAL and UpdateUPHAL. You can go from a MP to a UP, but not UP to MP. Just a tip. It took me a while to get all of our hardware platforms to work with one image. Good luck.

Edited by zorphnog
Link to comment
Share on other sites

Actually..you hit my problem right on the head. I got the hal to replace..but I am still getting a black screen when I boot up.

The computer is acpipic. So..do I just have to replace ntoskrnl.exe or both, hal.dll and ntoskrnl.exe.

Where should I get them? Where do I put them?

Link to comment
Share on other sites

get them out of the i386 folder and replace both with the correct versions.

So I should fully image a machine with the acpipic, and get the ntoskrnl.exe and hal.dll from system32?

Don't I have to get the ntoskrnl.exe and hal.dll that are for acpipic?

I'm a bit confused? Can you clarify a bit

Link to comment
Share on other sites

Hal.dll is a renamed file. see http://support.microsoft.com/kb/309283 for the original name for each of the HAL types. So you would copy acpipic.dll to hal.dll, and the same for ntoskrnl.exe. Once installed it is the same name for those two files because they are renamed during the install. So you can extract them from the i386 folder and rename them yourself.

Link to comment
Share on other sites

I follow now...

So I should change the vb script so if the computer is acpipic, it should extract and replace both, hal.dll and ntoskrnl.exe, from their original names to the working names in system32...

@zorphnog..

is acpipcic the only hal this is needed for?

@IcemanND..

What are the different original names for the ntoskrnl.exe? Do you know? (I haven't explored this yet, as I haven't been to the office)

Edited by dkreifus
Link to comment
Share on other sites

- Advanced Configuration and Power Interface (ACPI) PC - ACPIPIC_UP

- ACPI Uniprocessor PC - ACPIAPIC_UP

- ACPI Multiprocessor PC - ACPIAPIC_MP

Advanced Configuration and Power Interface (ACPI) PC

- halacpi.dll (renamed to hal.dll)

- ntkrnlpa.exe

- ntoskrnl.exe

ACPI Uniprocessor PC

- halaacpi.dll (renamed to hal.dll)

- ntkrnlpa.exe

- ntoskrnl.exe

ACPI Multiprocessor PC

- halmacpi.dll (renamed to hal.dll)

- ntkrpamp.exe (renamed to ntkrnlpa.exe)

- ntkrnlmp.exe (renamed to ntoskrnl.exe)¨

see also: http://support.microsoft.com/kb/237556/

Link to comment
Share on other sites

Oh dear you dont have to rename files etc.

Seal your image as "Advanced Configuration and Power Interface (ACPI) PC"

run your script.

no need to get files from the cd etc its in the dllcache folder.

works fine for me.

May I suggest your problem lies eleswhere?

if you seal your machine as ACPI then you have the correct HAL allready and that it should boot ok even if it was not the right hal your get a stop error or loop.

If you get a 7B Stop error then this will be a mass storage related driver issue.

I ran a test as follows...

Built a Ref machine DC5700 and a D500 both HP. one use's the ACPI Multiprocessor PC - ACPIAPIC_MP and the other use's ACPI Uniprocessor PC - ACPIAPIC_UP. I changed the HAL on both computers to be "Advanced Configuration and Power Interface (ACPI) PC" (So all my hal.dll files are in the dllcache) I did this by going to Device manager then expanded "computer" update driver, and manually select "Advanced Configuration and Power Interface (ACPI) PC".

Syspreped my machine and captured with imagex.

booted my NC6000 UP with winpe 2 (With wmi and scripting support) ran the ztihaldetect.vbs and echo'ed out the key it reads in my case for the NC6000 it was "acpipcic" so the script does nothing to sysprep.

nc6000 booted up fine.

Tried a DC7600 and a NC6400 and a D500.

The NC6400 reported back as "ACPIAPIC" the script then updated the sysprep in the unattend section.

I did not add or rename any files I don't even have an i386 on my image.

And it booted fine well I actually forgot about the storage drivers on the first test (7B Stop error) But the second test was fine.

DC7600 did the same booted fine, checked the HAL on start up and it was "ACPIAPIC_MP" Which is correct.

D500 did the same booted fine, checked the HAL on start up and it was "ACPIAPIC_UP" Which is correct.

So everything worked fine.

Add this to the script

wscript.echo sHalType(0) 

between



If sHalType(0) = "acpiapic" Then
 sHalType = oWshShell.RegRead("HKLM\SYSTEM\CurrentControlSet\Enum\Root\ACPI_HAL000\HardwareID")

Oh yeah where credit is due Johan Arwidmark.....

A geeks guide to Windows XP HAL Replacement

I beleive your having troble with the IBM T42 I am not sure what typ of HAL that model has?

Again if you have problems your welcome to PM me and I will be all to happy to help this is easy, supporting all the HAL Types now that is a nigtmare!

This works fine but is not supported by Microsoft.

on a side note did you solve your problem with the sata native mode? for the 945 chipset namly the ICH7M/ICH8M?

f you add the following to your sysprep...


[SysprepMassStorage]
;
; Added for NForce4 ATA support
;
PCI\VEN_10DE&DEV_0055&CC_0101=C:\Drivers\NVATA\nvata.inf
PCI\VEN_10DE&DEV_0054&CC_0101=C:\Drivers\NVATA\nvata.inf
PCI\VEN_10DE&DEV_0267&CC_0101=C:\Drivers\NVATA\nvata.inf
PCI\VEN_10DE&DEV_0266&CC_0101=C:\Drivers\NVATA\nvata.inf
PCI\VEN_10DE&DEV_037F&CC_0101=C:\Drivers\NVATA\nvata.inf
;
; Added for NForce4 RAID support
;
PCI\VEN_10DE&DEV_0055&CC_0104=C:\Drivers\NVRAID\nvraid.inf
PCI\VEN_10DE&DEV_0054&CC_0104=C:\Drivers\NVRAID\nvraid.inf
PCI\VEN_10DE&DEV_0267&CC_0104=C:\Drivers\NVRAID\nvraid.inf
PCI\VEN_10DE&DEV_0266&CC_0104=C:\Drivers\NVRAID\nvraid.inf
PCI\VEN_10DE&DEV_037F&CC_0104=C:\Drivers\NVRAID\nvraid.inf
;
; Added for NForce4 SMBus support
;
PCI\VEN_10DE&DEV_005E=C:\Drivers\NVSMBus\nf4sys.inf
PCI\VEN_10DE&DEV_00A4=C:\Drivers\NVSMBus\nf4sys.inf
PCI\VEN_10DE&DEV_00D3=C:\Drivers\NVSMBus\nf4sys.inf
PCI\VEN_10DE&DEV_02F0=C:\Drivers\NVSMBus\nf4sys.inf
PCI\VEN_10DE&DEV_02FE=C:\Drivers\NVSMBus\nf4sys.inf
PCI\VEN_10DE&DEV_02F8=C:\Drivers\NVSMBus\nf4sys.inf
PCI\VEN_10DE&DEV_02F9=C:\Drivers\NVSMBus\nf4sys.inf
PCI\VEN_10DE&DEV_027E=C:\Drivers\NVSMBus\nf4sys.inf
PCI\VEN_10DE&DEV_027F=C:\Drivers\NVSMBus\nf4sys.inf
PCI\VEN_10DE&DEV_02FF=C:\Drivers\NVSMBus\nf4sys.inf
PCI\VEN_10DE&DEV_0270=C:\Drivers\NVSMBus\nf4sys.inf
PCI\VEN_10DE&DEV_0272=C:\Drivers\NVSMBus\nf4sys.inf
PCI\VEN_10DE&DEV_02FA=C:\Drivers\NVSMBus\nf4sys.inf
PCI\VEN_10de&DEV_01b4=C:\Drivers\NVSMBus\nvsmbus.inf
PCI\VEN_10de&DEV_0064=C:\Drivers\NVSMBus\nvsmbus.inf
PCI\VEN_10de&DEV_00D4=C:\Drivers\NVSMBus\nvsmbus.inf
PCI\VEN_10de&DEV_0084=C:\Drivers\NVSMBus\nvsmbus.inf
PCI\VEN_10de&DEV_00E4=C:\Drivers\NVSMBus\nvsmbus.inf
PCI\VEN_10de&DEV_0052=C:\Drivers\NVSMBus\nvsmbus.inf
PCI\VEN_10de&DEV_0034=C:\Drivers\NVSMBus\nvsmbus.inf
PCI\VEN_10de&DEV_0264=C:\Drivers\NVSMBus\nvsmbus.inf
PCI\VEN_10DE&DEV_0368=C:\Drivers\NVSMBus\nvsmbus.inf
PCI\VEN_10DE&DEV_03EB=C:\Drivers\NVSMBus\nvsmbus.inf
PCI\VEN_10DE&DEV_03F4=C:\Drivers\NVSMBus\nvsmbus.inf
PCI\VEN_10DE&DEV_8352=C:\Drivers\NVSMBus\nvsmbus.inf
;
; Added for Intel SATA Controller Support
;
PCI\VEN_8086&DEV_2652&CC_0106=C:\Drivers\IntelSATA\iaahci.inf
PCI\VEN_8086&DEV_2653&CC_0106=C:\Drivers\IntelSATA\iaahci.inf
PCI\VEN_8086&DEV_27C1&CC_0106=C:\Drivers\IntelSATA\iaahci.inf
PCI\VEN_8086&DEV_27C5&CC_0106=C:\Drivers\IntelSATA\iaahci.inf
PCI\VEN_8086&DEV_2681&CC_0106=C:\Drivers\IntelSATA\iaahci.inf
PCI\VEN_8086&DEV_2821&CC_0106=C:\Drivers\IntelSATA\iaahci.inf
PCI\VEN_8086&DEV_2652&CC_0104=C:\Drivers\IntelSATA\iastor.inf
PCI\VEN_8086&DEV_27C3&CC_0104=C:\Drivers\IntelSATA\iastor.inf
PCI\VEN_8086&DEV_2682&CC_0104=C:\Drivers\IntelSATA\iastor.inf
PCI\VEN_8086&DEV_27C6&CC_0104=C:\Drivers\IntelSATA\iastor.inf
PCI\VEN_8086&DEV_2822&CC_0104=C:\Drivers\IntelSATA\iastor.inf
;
; Added for ich5ide Controller Support
;
PCI\VEN_8086&DEV_24D1 = C:\Drivers\IntelInf\ich5ide.inf
PCI\VEN_8086&DEV_24DB = C:\Drivers\IntelInf\ich5ide.inf
PCI\VEN_8086&DEV_25A2 = C:\Drivers\IntelInf\ich5ide.inf
PCI\VEN_8086&DEV_25A3 = C:\Drivers\IntelInf\ich5ide.inf
;
; Added for ich6core Controller Support
;
PCI\VEN_8086&DEV_2640 = C:\Drivers\IntelInf\ich6core.inf
PCI\VEN_8086&DEV_2641 = C:\Drivers\IntelInf\ich6core.inf
PCI\VEN_8086&DEV_2642 = C:\Drivers\IntelInf\ich6core.inf
PCI\VEN_8086&DEV_266A = C:\Drivers\IntelInf\ich6core.inf
PCI\VEN_8086&DEV_2660 = C:\Drivers\IntelInf\ich6core.inf
PCI\VEN_8086&DEV_2662 = C:\Drivers\IntelInf\ich6core.inf
PCI\VEN_8086&DEV_2664 = C:\Drivers\IntelInf\ich6core.inf
PCI\VEN_8086&DEV_2666 = C:\Drivers\IntelInf\ich6core.inf
;
; Added for ich6usb Controller Support
;
PCI\VEN_8086&DEV_2658 = C:\Drivers\IntelInf\ich6usb.inf
PCI\VEN_8086&DEV_2659 = C:\Drivers\IntelInf\ich6usb.inf
PCI\VEN_8086&DEV_265A = C:\Drivers\IntelInf\ich6usb.inf
PCI\VEN_8086&DEV_265B = C:\Drivers\IntelInf\ich6usb.inf
PCI\VEN_8086&DEV_265C = C:\Drivers\IntelInf\ich6usb.inf
;
; Added for ich7ide Controller Support
;
PCI\VEN_8086&DEV_27C0 = C:\Drivers\IntelInf\ich7ide.inf
PCI\VEN_8086&DEV_27C4 = C:\Drivers\IntelInf\ich7ide.inf
PCI\VEN_8086&DEV_27DF = C:\Drivers\IntelInf\ich7ide.inf
;
; Added for ich8core Controller Support
;
PCI\VEN_8086&DEV_2810 = C:\Drivers\IntelInf\ich8core.inf
PCI\VEN_8086&DEV_2811 = C:\Drivers\IntelInf\ich8core.inf
PCI\VEN_8086&DEV_2812 = C:\Drivers\IntelInf\ich8core.inf
PCI\VEN_8086&DEV_2814 = C:\Drivers\IntelInf\ich8core.inf
PCI\VEN_8086&DEV_2815 = C:\Drivers\IntelInf\ich8core.inf
PCI\VEN_8086&DEV_283F = C:\Drivers\IntelInf\ich8core.inf
PCI\VEN_8086&DEV_2841 = C:\Drivers\IntelInf\ich8core.inf
PCI\VEN_8086&DEV_2843 = C:\Drivers\IntelInf\ich8core.inf
PCI\VEN_8086&DEV_2845 = C:\Drivers\IntelInf\ich8core.inf
PCI\VEN_8086&DEV_2847 = C:\Drivers\IntelInf\ich8core.inf
PCI\VEN_8086&DEV_2849 = C:\Drivers\IntelInf\ich8core.inf
PCI\VEN_8086&DEV_284F = C:\Drivers\IntelInf\ich8core.inf
;
; Added for ich8smb Controller Support
;
PCI\VEN_8086&DEV_283E = C:\Drivers\IntelInf\ich8smb.inf
;
; Added for ichXdev Controller Support
;
PCI\VEN_8086&DEV_537C = C:\Drivers\IntelInf\ichXdev.inf
;
; Added for ich5usb Controller Support
;
PCI\VEN_8086&DEV_24D2 = C:\Drivers\IntelInf\ich5usb.inf
PCI\VEN_8086&DEV_24D4 = C:\Drivers\IntelInf\ich5usb.inf
PCI\VEN_8086&DEV_24D7 = C:\Drivers\IntelInf\ich5usb.inf
PCI\VEN_8086&DEV_24DE = C:\Drivers\IntelInf\ich5usb.inf
PCI\VEN_8086&DEV_24DD = C:\Drivers\IntelInf\ich5usb.inf
PCI\VEN_8086&DEV_25A9 = C:\Drivers\IntelInf\ich5usb.inf
PCI\VEN_8086&DEV_25AA = C:\Drivers\IntelInf\ich5usb.inf
PCI\VEN_8086&DEV_25AD = C:\Drivers\IntelInf\ich5usb.inf
;
; Added for ich6ide Controller Support
;
PCI\VEN_8086&DEV_2651 = C:\Drivers\IntelInf\ich6ide.inf
PCI\VEN_8086&DEV_2652 = C:\Drivers\IntelInf\ich6ide.inf
PCI\VEN_8086&DEV_2653 = C:\Drivers\IntelInf\ich6ide.inf
PCI\VEN_8086&DEV_266F = C:\Drivers\IntelInf\ich6ide.inf
;
; Added for ich7core Controller Support
;
PCI\VEN_8086&DEV_27B0 = C:\Drivers\IntelInf\ich7core.inf
PCI\VEN_8086&DEV_27B8 = C:\Drivers\IntelInf\ich7core.inf
PCI\VEN_8086&DEV_27B9 = C:\Drivers\IntelInf\ich7core.inf
PCI\VEN_8086&DEV_27BD = C:\Drivers\IntelInf\ich7core.inf
PCI\VEN_8086&DEV_27DA = C:\Drivers\IntelInf\ich7core.inf
PCI\VEN_8086&DEV_27D0 = C:\Drivers\IntelInf\ich7core.inf
PCI\VEN_8086&DEV_27D2 = C:\Drivers\IntelInf\ich7core.inf
PCI\VEN_8086&DEV_27D4 = C:\Drivers\IntelInf\ich7core.inf
PCI\VEN_8086&DEV_27D6 = C:\Drivers\IntelInf\ich7core.inf
PCI\VEN_8086&DEV_27E0 = C:\Drivers\IntelInf\ich7core.inf
PCI\VEN_8086&DEV_27E2 = C:\Drivers\IntelInf\ich7core.inf
;
; Added for ich7usb Controller Support
;
PCI\VEN_8086&DEV_27C8 = C:\Drivers\IntelInf\ich7usb.inf
PCI\VEN_8086&DEV_27C9 = C:\Drivers\IntelInf\ich7usb.inf
PCI\VEN_8086&DEV_27CA = C:\Drivers\IntelInf\ich7usb.inf
PCI\VEN_8086&DEV_27CB = C:\Drivers\IntelInf\ich7usb.inf
PCI\VEN_8086&DEV_27CC = C:\Drivers\IntelInf\ich7usb.inf
;
; Added for ich8ide Controller Support
;
PCI\VEN_8086&DEV_2820 = C:\Drivers\IntelInf\ich8ide.inf
PCI\VEN_8086&DEV_2825 = C:\Drivers\IntelInf\ich8ide.inf
PCI\VEN_8086&DEV_2828 = C:\Drivers\IntelInf\ich8ide.inf
PCI\VEN_8086&DEV_2850 = C:\Drivers\IntelInf\ich8ide.inf
;
; Added for ich8usb Controller Support
;
PCI\VEN_8086&DEV_2830 = C:\Drivers\IntelInf\ich8usb.inf
PCI\VEN_8086&DEV_2831 = C:\Drivers\IntelInf\ich8usb.inf
PCI\VEN_8086&DEV_2832 = C:\Drivers\IntelInf\ich8usb.inf
PCI\VEN_8086&DEV_2834 = C:\Drivers\IntelInf\ich8usb.inf
PCI\VEN_8086&DEV_2835 = C:\Drivers\IntelInf\ich8usb.inf
PCI\VEN_8086&DEV_2836 = C:\Drivers\IntelInf\ich8usb.inf
PCI\VEN_8086&DEV_283A = C:\Drivers\IntelInf\ich8usb.inf

And then download the "Intel® Matrix Storage Manager" package from the intel site follow the instructions to extract the files. Then you will not have to turn off SATA native support in the bios.

again thanks to Johan Arwidmark

Edited by p4ntb0y
Link to comment
Share on other sites

May I suggest your problem lies eleswhere?

if you seal your machine as ACPI then you have the correct HAL allready and that it should boot ok even if it was not the right hal your get a stop error or loop.

If you get a 7B Stop error then this will be a mass storage related driver issue.

I can assure you this is not a mass storage related driver issue. The problem lies with M$'s implementation of sysprep. Using the UpdateUPHAL will only update one type of HAL. Essentially, UpdateUPHAL replaces hal.dll with halaacpi.dll. If you have a system that uses a acpipic architecture, you must load the halacpi.dll file. Sysprep sees that acpipic is a UP type architecture and replaces hal.dll with halaacpi.dll instead of the proper dll.

I experienced the exact same problem you are experiencing and this is the solution i used.

Capture process:

1. Created my baseline system on a ACPIAPIC_MP architecture system.

2. Sysprepped with UpdateUPHAL entry.

3. Imaged with ghost.

Apply process:

1. Restore ghost image.

2. If the system is a ACPIPIC HAL then I remove the UpdateUPHAL entry from the sysprep.inf file on the restored disk, and I replace the C:\Windows\system32\hal.dll file on the restored disk with halacpi.dll (found on XP or whatever system you are using installation disk). I replace C:\Windows\system32\ntoskrnl.exe with the ntoskrnl.exe found on the installation disk.

3. Reboot and start the Windows mini-setup process.

If you replace the hal.dll and ntoskrnl.exe and do not remove the UpdateUPHAL from the sysprep.inf file, the system will go through the mini-setup process until it is rebooted and the blank screen problem will happen again. This is because the mini-setup process will replace hal.dll with halaacpi.dll as I mentioned before, and why I say I am positive this is a HAL issue and not a mass storage driver issue.

The halacpi.dll and ntoskrnl.exe files will be compressed on the installation disk, showing up as halacpi.dl_ and ntoskrnl.ex_. You can use the expand command to extract them.

Link to comment
Share on other sites

To be honest, I don't know much about HALs to this level the way you guys do. I am going to start one way, then another. I am NOT inclined to think it is a mass storage problem, as the same identical unattended image works perfect on my Lenovo T60 and Lenovo T42. The only issue is the black screen I get if I use a T60 or HP DC5700 as the base for the image. The T-42 gets the black screen. I use the same unattended image on the T-42, sysprep it, etc, and it works fine on T-42 and "lower" models. (HP desktops included).

I think it is the HAL as well, but I'm not sure which one of your processs to go with. I guess I'll have to try both. Currently in my image, I have I386 stored there. Hopefully that will help.

Oh, the T-42 has Advanced Configuration and Power Interface PC. (ACPI)- (From Device Manager>Comptuer)

It is coming back from the ZTIDetect script as acpipic

My T-60 is coming back as a acpiapic

@p4ntb0y..

I haven't resolved the SATA issue. But you spelled out the solution pretty clear.

I assume

; Added for Intel SATA Controller Support

;

PCI\VEN_8086&DEV_2652&CC_0106=C:\Drivers\IntelSATA\iaahci.inf

PCI\VEN_8086&DEV_2653&CC_0106=C:\Drivers\IntelSATA\iaahci.inf

PCI\VEN_8086&DEV_27C1&CC_0106=C:\Drivers\IntelSATA\iaahci.inf

PCI\VEN_8086&DEV_27C5&CC_0106=C:\Drivers\IntelSATA\iaahci.inf

PCI\VEN_8086&DEV_2681&CC_0106=C:\Drivers\IntelSATA\iaahci.inf

PCI\VEN_8086&DEV_2821&CC_0106=C:\Drivers\IntelSATA\iaahci.inf

PCI\VEN_8086&DEV_2652&CC_0104=C:\Drivers\IntelSATA\iastor.inf

PCI\VEN_8086&DEV_27C3&CC_0104=C:\Drivers\IntelSATA\iastor.inf

PCI\VEN_8086&DEV_2682&CC_0104=C:\Drivers\IntelSATA\iastor.inf

PCI\VEN_8086&DEV_27C6&CC_0104=C:\Drivers\IntelSATA\iastor.inf

PCI\VEN_8086&DEV_2822&CC_0104=C:\Drivers\IntelSATA\iastor.inf

is the section I really need to add Edited by dkreifus
Link to comment
Share on other sites

Just to shed some light on the situation. I use a T60 as my baseline and originally experienced the black screen issue with T40's and T42's as well as some older panasonics. Within PE I have only seen that registry value return acpipic or acpiapic. The only time I experience the problem is when a computer shows up as acpipic.

Link to comment
Share on other sites

Public Sub FixHAL()
'this code will not work on XP. The WMI call does not exist in XP and the way
'that Vista and XP store the HAL in the reg is different.

Dim oComputerSystemSet As SWbemObjectSet
Dim oComputerSystem As SWbemObject
Dim bytCPUs As Byte
Dim sHALType As String
Dim oWSHShell As WshShell

Set oComputerSystemSet = GetObject("winmgmts:root\CIMV2").ExecQuery("Select NumberOfLogicalProcessors from Win32_ComputerSystem", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly)

For Each oComputerSystem In oComputerSystemSet
bytCPUs = oComputerSystem.NumberOfLogicalProcessors
Next

Set oComputerSystem = Nothing
Set oComputerSystemSet = Nothing

If bytCPUs = 1 Then

Set oWSHShell = New WshShell

sHALType = oWSHShell.RegRead("HKLM\SYSTEM\CurrentControlSet\Enum\Root\ACPI_HAL000\HardwareID")(0)

Set oWSHShell = Nothing

If LCase$(sHALType) = "acpiapic" Then
WriteIni "C:\SYSPREP\SYSPREP.INF", "Unattended", "UpdateUPHAL", "ACPIAPIC_UP,%WINDIR%\Inf\Hal.inf"
WriteIni "W:\SYSPREP\SYSPREP.INF", "Unattended", "UpdateUPHAL", "ACPIAPIC_UP,%WINDIR%\Inf\Hal.inf"
End If
ElseIf bytCPUs >= 2 Then
WriteIni "C:\SYSPREP\SYSPREP.INF", "Unattended", "UpdateHAL", "ACPIAPIC_MP,%WINDIR%\Inf\Hal.inf"
WriteIni "W:\SYSPREP\SYSPREP.INF", "Unattended", "UpdateHAL", "ACPIAPIC_MP,%WINDIR%\Inf\Hal.inf"
End If

Exit Sub

End Sub

A couple of things.

The base image should have it's HAL set to "Advanced Configuration and Power Interface (ACPI) PC".

-In my experience this works on my 25+ models of PC, I've yet to find one that it will not work on.

The registry path was wrong (or cut off) to read the HAL type from and tt returns an array, so reference the first index of the array.

This code will basically set the HAL to _UP if the hal is already acpiapic, set it to _MP if there is more then one LogicalProcessor, and leave it alone if it is neither of these.

The names of HALs in XP (PE < 2.0) are different from the names of HALs in Vista (PE >=2.0)

Replacing any of the HAL files directly is just trashy. MS repeatadly says 'don't do that' as the various HALs have various registry keys and other settings that a benchmark of a true _MP versus a ACPI with a hacked in _MP HAL.DLL shows signifigant difference (This is KB on this that I found once).

For other BSOD's, BMSD is an important step, don't skimp on that and jumping CPU vendors requires changes as well.

The current "unfied imaged" that I use works on everything I've loaded it on and also has a TabletPC version derived from the XPSP2 build, everytime I re-capture it. Off the top of my head... Tested and works on IBM Desktops M41 - M55, IBM Laptops T23 - T60 (with P variants), Multiple flavors of Tougbooks CF-18/19, CF-29/30, OQO Model01(TransMeta CPU) and 02 (Via C7M CPU), the new Samsung UMPC Q1Ultra, Dell GX60, GX270, XPS Laptop and M90 Laptop. HP dx2250 (ATI chipset + AMD CPU)

Edited by trtkron
Link to comment
Share on other sites

Update:

After booting to WinPE...

I extracted halacpi.dl_ and ntoskrnl.ex_ from I386.

First I copied ntoskrnl...(I renamed the old one, and then extracted/renamed the new one)

No luck..still a black screen

I repeated the process with the halacpi.dl_...this time, when I rebooted, it told me the hal.dll file was corrupt.

Now I am going to redo the process, but instead of getting the files from I386, I'll get them from I386\Drivers.cab

Link to comment
Share on other sites

Follow up!

It worked. Turns out the Hal.dll was just never renamed properly. So the first thing I am going to do is recheck it. First by switching the Hal...see if i can bypass the ntoskrnl.exe file...(just to isolate the problem).

Then..I'll work on setting the script to swap those files in case of acpipic...

Wow..1 1/2 years of work..coming to a resolution...I'm kinda pysched

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...