Jump to content

trtkron

Member
  • Posts

    24
  • Joined

  • Last visited

  • Donations

    0.00 USD 
  • Country

    United States

Everything posted by trtkron

  1. Recopy the wim back onto the drive. I get this every now and then if the file doesn't finish copying (i've gotten in the habit of "safely remove hardware" so it doesn't happen anymore)
  2. Probably whatever libraries are referenced in the project? In the past, I had used comdl32 and comtrl, but I ended up dropping those and just using direct API calls to avoid the extra baggage of missing libraries. Whats the point of slimming down the CD and then stuff a bunch of DLLs and OCXs back in?
  3. You are probably looking for these. wpeutil SetKeyboardLayout wpeutil SetMuiLanguage wpeutil SetUserLocale WPEUtil Command Line Options
  4. That last post reminded me of something... In my code I do this. Check for cable being present. If it is then Check for IP if no IP then Restart network adapters check for IP Public Function CheckForIP() As Boolean 'have IP and have gateway means you have IP. ' 169. triggers as ipenabled so have to check gateway Dim oNetworkAdapterConfigurationSet As WbemScripting.SWbemObjectSet Dim oNetworkAdapterConfiguration As WbemScripting.SWbemObject On Error Resume Next Set oNetworkAdapterConfigurationSet = GetObject("winmgmts:root\CIMV2").ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly) For Each oNetworkAdapterConfiguration In oNetworkAdapterConfigurationSet If Not IsNull(oNetworkAdapterConfiguration.DefaultIPGateway) Then CheckForIP = True End If Next Set oNetworkAdapterConfiguration = Nothing Set oNetworkAdapterConfigurationSet = Nothing Exit Function End Function A a snip on checking if the cable is plugged in. There is a WMI call for checking cable plugged in, but it doesn't work in PE (Or at least didn't last time I checked) FYI, TokenRing doesn't return .Speed, so I have different checks for that... but who else is still using that? After checking for a cable, I restart the card (because I change it's mac address to a specific range, identfying it) then ipconfig /setclassid for a specific dhcp class we use for winpe devices (which, btw does a renew on it's own). Then I check for gateway, no gateway then we use WMI to renew one more time. Set oNetworkAdapterSet = GetObject("winmgmts:root\CIMV2").ExecQuery("SELECT Description, Index, MACAddress, Speed FROM Win32_NetworkAdapter WHERE AdapterTypeID = 0", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly) For Each oNetworkAdapter In oNetworkAdapterSet If IsNull(oNetworkAdapter.Description) Or IsNull(oNetworkAdapter.MACAddress) Or IsNull(oNetworkAdapter.Speed) Then 'bad card Else If Int(Right$(oNetworkAdapter.Speed, 2)) Mod 10 = 0 Then bNetworkCableConnected = True End If End If Next End If Set oNetworkAdapter = Nothing Set oNetworkAdapterSet = Nothing If bNetworkCableConnected Then ShellAndWait "DEVCON RESTART =NET", vbHide ShellAndWait "IPCONFIG /SETCLASSID * WINPE", vbHide Set oNetworkAdapterConfigurationSet = GetObject("winmgmts:root\CIMV2").ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly) For Each oNetworkAdapterConfiguration In oNetworkAdapterConfigurationSet If IsNull(oNetworkAdapterConfiguration.DefaultIPGateway) Then oNetworkAdapterConfiguration.RenewDHCPLease End If Next Set oNetworkAdapterConfiguration = Nothing Set oNetworkAdapterConfigurationSet = Nothing
  5. I meant to always come back and add this, the code to fix an image to work on non-intel CPU's (When the master image was from an Intel. Sysprep doesn't remove CPU information). Public Sub FixNonIntelCPU() 'removes the "intelppm" driver from the registry and the file from sys32\drivers if the CPU is not an intel Dim oProcessorSet As WbemScripting.SWbemObjectSet Dim oProcessor As WbemScripting.SWbemObject Dim sCPUType As String Dim oFileSystem As Scripting.FileSystemObject On Error GoTo Error_ Set oProcessorSet = GetObject("winmgmts:root\CIMV2").ExecQuery("Select Manufacturer from Win32_Processor", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly) For Each oProcessor In oProcessorSet sCPUType = Trim$(oProcessor.Manufacturer) Next Set oProcessor = Nothing Set oProcessorSet = Nothing Select Case sCPUType Case "GenuineIntel" 'do nothing, the setup works for Intel's already Case "AuthenticAMD", "GenuineTMx86", "CentaurHauls" 'AMD, Transmeta, and Via C7M for OQO Set oFileSystem = New Scripting.FileSystemObject If oFileSystem.FileExists("C:\WINDOWS\SYSTEM32\DRIVERS\INTELPPM.SYS") Then oFileSystem.DeleteFile "C:\WINDOWS\SYSTEM32\DRIVERS\INTELPPM.SYS", True End If If oFileSystem.FileExists("W:\WINDOWS\SYSTEM32\DRIVERS\INTELPPM.SYS") Then oFileSystem.DeleteFile "W:\WINDOWS\SYSTEM32\DRIVERS\INTELPPM.SYS", True End If Set oFileSystem = Nothing ShellAndWait "REG LOAD HKLM\PRIOS W:\WINDOWS\SYSTEM32\CONFIG\SYSTEM", vbHide ShellAndWait "REG DELETE HKLM\PRIOS\ControlSet001\Services\intelppm /f", vbHide ShellAndWait "REG DELETE HKLM\PRIOS\ControlSet002\Services\intelppm /f", vbHide ShellAndWait "REG DELETE HKLM\PRIOS\ControlSet003\Services\intelppm /f", vbHide ShellAndWait "REG UNLOAD HKLM\PRIOS", vbHide ShellAndWait "REG LOAD HKLM\ALTOS C:\WINDOWS\SYSTEM32\CONFIG\SYSTEM", vbHide ShellAndWait "REG DELETE HKLM\ALTOS\ControlSet001\Services\intelppm /f", vbHide ShellAndWait "REG DELETE HKLM\ALTOS\ControlSet002\Services\intelppm /f", vbHide ShellAndWait "REG DELETE HKLM\ALTOS\ControlSet003\Services\intelppm /f", vbHide ShellAndWait "REG UNLOAD HKLM\ALTOS", vbHide Case Else 'Unknown CPU dPrint ("Uknown CPU Detected : " & sCPUType) End Select Exit Sub Error_: ReportError Err.Number, Err.LastDllError, Err.Description, Erl, True, "FixNonIntelCPU" End Sub
  6. Here is one more suggestion, it is what I use to check the memory of a device and if its too low, to create a pagefile. Private Declare Sub GlobalMemoryStatus Lib "kernel32" (lpBuffer As MEMORYSTATUS) Private Type MEMORYSTATUS dwLength As Long dwMemoryLoad As Long dwTotalPhys As Long dwAvailPhys As Long dwTotalPageFile As Long dwAvailPageFile As Long dwTotalVirtual As Long dwAvailVirtual As Long End Type Public Sub CheckMemory() Dim MS As MEMORYSTATUS MS.dwLength = Len(MS) GlobalMemoryStatus MS lPhysicalRAM = MS.dwTotalPhys / 1024 ^ 2 If lPhysicalRAM < 320 Then If FolderExists("I:\") Then ShellAndWait "WPEUTIL CreatePageFile /path=I:\pagefile.sys /size=256", vbHide If Not FileExists("I:\pagefile.sys") Then ShellAndWait "WPEUTIL CreatePageFile /path=I:\pagefile.sys", vbHide End If ElseIf FolderExists("H:\") Then ShellAndWait "WPEUTIL CreatePageFile /path=H:\pagefile.sys /size=256", vbHide If Not FileExists("H:\pagefile.sys") Then ShellAndWait "WPEUTIL CreatePageFile /path=H:\pagefile.sys", vbHide End If Else MsgBox "This machine does not meet the minimum memory requirements and a USB device can not be located to create a pagefile.", vbOKOnly + vbCritical, "Critical Error" End If End If End Sub And for freeing up memory, I just stop a couple of services, gives back (if memory serves) about 4MB of RAM. ShellAndWait "WPEUTIL DisableFirewall", vbHide ShellAndWait "NET STOP MPSSVC", vbHide ShellAndWait "NET STOP IKEEXT", vbHide ShellAndWait "NET STOP EVENTLOG", vbHide
  7. This won't fit perfectly for you as-is, but this is part of the script I use for CD stuff. I set the cdrom drive with the cdname "WINPE" to G: If the drive is ready and is a cdrom drive, has a volumename and that name is "WINPE" then {if the drive is not G: but G: exists, then move G: via diskpart to another letter} create a text file selecting the drive via drive letter and assign it to be G:, via diskpart. Set oFileSystem = New Scripting.FileSystemObject For Each vDrive In oFileSystem.Drives If vDrive.IsReady Then If vDrive.DriveType = 4 Then If LenB(vDrive.VolumeName) <> 0 And vDrive.VolumeName = "WINPE" Then If vDrive.DriveLetter <> "G" Then If FolderExists("G:\") Then ShellAndWait "DISKPART /S X:\WINDOWS\SYSTEM32\NU2MENU\REMOVEG.TXT", vbHide End If If (Not FolderExists("G:\")) And LenB(vDrive.DriveLetter) <> 0 Then Dim oFileWrite As TextStream Set oFileWrite = oFileSystem.CreateTextFile("X:\WINDOWS\TEMP\FIXCD.TXT", True) oFileWrite.WriteLine "SELECT VOLUME " & vDrive.DriveLetter oFileWrite.WriteLine "ASSIGN LETTER=G" oFileWrite.Close Set oFileWrite = Nothing ShellAndWait "DISKPART /S X:\WINDOWS\TEMP\FIXCD.TXT", vbHide End If End If End If End If End If Next
  8. You can use peimg /inf=<path> on prep'd images. You don't have to work any magic. It works just fine. As for user interface, my company has two that I developed. The PE batch file calls our "loader" that sets all the drive letters how I want them, discovers cdrom drives, stop services, creates a pagefile if needed and then kicks of the primary frontend. This front end has options for all of our images, has links to the basic utils like regedit and notepad and other stuff like some remote admin tools. It sets mac addresses (still use these), gets ip, finds the closest imaging server and does its bit. Has a lot of guts to it, but works great for us. We have about 15 different PC models in service right now, (Desktop, Laptop and Tablet) and they run from the same wim file that is about 1.1GB. The shell does all the HAL magic, injects drivers based on what model the PC is and also stages applications to the imaged PC to be installed after it comes out of sysprep. It is all just a simple VB6 app, added 0 dll's to the machine to run the app, just "devcon" to better control devices since I like using it better then reinventing the wheel with win32 calls. I think people have some basic UI's out there driven by HTA or other simple GUI's. The loader and shell we use has been in used since about a year ago and it has been an amazing tool versus the old ghost/pqi + maintaing 15+ images.
  9. I know that nonSP1 did not have the Intel NIC driver for these devices (PCI\VEN_8086&DEV_10BD) and SP1 added support since the first sp1 beta of the waik. I have had 0 issues with these models gettting IP on the first try.
  10. Need to load the video hook driver. For me, I have it (raddrv.dll), AdmDll.dll, and r_server.exe in \windows\system32. Only files you need. R_server service never works (r_server /service), but call the application straight up and works fine. This reg file has the system hive loaded to hklm\sys. Just add this. You can have the wpeinit batch file (whatever it is called) just start r_server.exe and it will work for you. Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\sys\ControlSet001\Services\raddrv] "Type"=dword:00000001 "Start"=dword:00000001 "ErrorControl"=dword:00000001 "ImagePath"=hex(2):5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\ 74,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,72,00,61,\ 00,64,00,64,00,72,00,76,00,2e,00,64,00,6c,00,6c,00,00,00 "DisplayName"="raddrv" [HKEY_LOCAL_MACHINE\sys\ControlSet001\Services\raddrv\Security] "Security"=hex:01,00,14,80,90,00,00,00,9c,00,00,00,14,00,00,00,30,00,00,00,02,\ 00,1c,00,01,00,00,00,02,80,14,00,ff,01,0f,00,01,01,00,00,00,00,00,01,00,00,\ 00,00,02,00,60,00,04,00,00,00,00,00,14,00,fd,01,02,00,01,01,00,00,00,00,00,\ 05,12,00,00,00,00,00,18,00,ff,01,0f,00,01,02,00,00,00,00,00,05,20,00,00,00,\ 20,02,00,00,00,00,14,00,8d,01,02,00,01,01,00,00,00,00,00,05,0b,00,00,00,00,\ 00,18,00,fd,01,02,00,01,02,00,00,00,00,00,05,20,00,00,00,23,02,00,00,01,01,\ 00,00,00,00,00,05,12,00,00,00,01,01,00,00,00,00,00,05,12,00,00,00 [HKEY_LOCAL_MACHINE\sys\ControlSet001\Services\raddrv\Enum] "Count"=dword:00000000 "NextInstance"=dword:00000000 "INITSTARTFAILED"=dword:00000001
  11. I have the very same model of PC under my desk right now. Sp1 version of PE2 has those drivers integrated already. I'm using build 6001-16659-070916-1443 of PE. With the non sp version, you can always just peimg /inf=path_to_intel_driver path_to_pe
  12. http://msdn2.microsoft.com/en-us/library/ms791349.aspx Turn that on too, so that flushes happen right away, I had an issue once where I was chasing the wrong thing because of when the flush happened (on a certain machine using the unified, I have to pull out usbport.inf, let it go through setup, then put it back in and devcon install the usb ports)
  13. My unified works fine on the M52, but not the M52e. Only PC to date I couldn't get it to load on (works on about 40 other models). The TPM is not the issue at all. I don't have a M52 hooked up to look, is that a ICH7 device? I know on a couple of models of IBM (Lenovo) I had to go get an updated Intel Chipset (just ICH7 and IMSM) to get it working. Turn boot logging on and see if it creates a log file. If it does, problem isn't storage, it is something else. If it doesn't get created ... re -bmsd your master image with updated chipset inf data for that specific model, see if that resolves it.
  14. For machines that I know only have 256, I just keep a handful of old 128-256MB flash drives around that I use to create pagefiles on. A VB script runs to check memory and stops a handful of services and then looks for the flash drive to create the page file, if it doesn't have it... produces a reminder to plug a drive in. I couldn't find any other way around that 256 limit, some machines make it further then others, but all 256's eventually die during some point of the imaging process
  15. After you have made edit's, export the file into a new file. imagex /export /compress maximum boot.wim * boot.new
  16. No I don't. The reason for you problem is that Wimgapi is multithreaded so you have to create a form/progressbar/whatever + callback for it on the fly to track the progress when using VB6.
  17. Here is some code to get you started. I belive this is everything in wimgapi.h and a couple examples. Some tricky ones are the progress bar ones. Wimgapi is multithreaded so you have to create a form + callback for it on the fly to track the progress when using VB6. Option Explicit Public Declare Function WIMApplyImage Lib "WIMGAPI.DLL" (ByVal hImage As Long, ByVal lpszPath As String, ByVal dzApplyFlags As Long) As Boolean Public Declare Function WIMCaptureImage Lib "WIMGAPI.DLL" (ByVal hwim As Long, ByVal lpszPath As String, ByVal dwCaptureFlags As Long) As Boolean Public Declare Function WIMCloseHandle Lib "WIMGAPI.DLL" (ByVal hObject As Long) As Boolean Public Declare Function WIMCreateFile Lib "WIMGAPI.DLL" (ByVal lpszWimPath As String, ByVal dwDesiredAccess As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal dwCompressionType As Long, ByRef CreationResult As Boolean) As Long Public Declare Function WIMMountImage Lib "WIMGAPI.DLL" (ByVal lpszMountPath As String, ByVal lpszWimFileName As String, ByVal dwImageIndex As Long, Optional ByVal lpszTempPath As String) As Boolean Public Declare Function WIMDeleteImage Lib "WIMGAPI.DLL" (ByVal hwim As Long, ByVal dwApplyFlags As Integer) As Boolean Public Declare Function WIMExportImage Lib "WIMGAPI.DLL" (ByVal hImage As Long, ByVal hwim As Long, ByVal dwApplyFlags As Integer) As Boolean Public Declare Function WIMGetImageCount Lib "WIMGAPI.DLL" (ByVal hwim As Long) As Integer Public Declare Function WIMGetMessagecallbackCount Lib "WIMGAPI.DLL" (ByVal hwim As Long) As Integer Public Declare Function WIMLoadImage Lib "WIMGAPI.DLL" (ByVal hwim As Long, ByVal dwImageIndex As Integer) As Long Public Declare Function WIMSetBootImage Lib "WIMGAPI.DLL" (ByVal hwim As Long, ByVal dwImageIndex As Integer) As Boolean Public Declare Function WIMSetReferenceFile Lib "WIMGAPI.DLL" (ByVal hwim As Long, ByVal lpszPath As String, ByVal dwFlags As Integer) As Boolean Public Declare Function WIMSplitFile Lib "WIMGAPI.DLL" (ByVal hwim As Long, ByVal lpszPartPath As String, ByRef pliPartSize As Integer, ByVal dwFlags As Integer) As Boolean Public Declare Function WIMUnmountImage Lib "WIMGAPI.DLL" (ByVal lpszMountPath As String, ByVal lpszWimFileName As String, ByVal dwImageIndex As Integer, ByVal bCommitChanges As Boolean) As Boolean Public Declare Function WIMSetTemporaryPath Lib "WIMGAPI.DLL" (ByVal hwim As Long, ByVal lpszPath As String) As Boolean Public Declare Function WIMGetImageInformation Lib "WIMGAPI.DLL" (ByVal hImage As Long, ByRef lplpvImageInfo As Long, ByRef lpcbImageInfo As Integer) As Boolean Public Declare Function WIMSetImageInformation Lib "WIMGAPI.DLL" (ByVal hImage As Long, ByVal lpvImageInfo As Long, ByVal cbImageInfo As Integer) As Boolean Public Declare Function WIMMessageCallback Lib "WIMGAPI.DLL" (ByVal dwMessageId As Integer, ByVal wParam As Long, ByVal lParam As Long, ByVal lpvUserData As Long) As Integer Public Declare Function WIMCopyFile Lib "WIMGAPI.DLL" (ByVal lpszExistingFileName As String, ByVal lpszNewFileName As String, ByVal lpProgressRoutine As Any, ByVal lpvData As Long, ByVal pbCancel As Boolean, ByVal dwCopyFlags As Integer) As Boolean Public Const WIM_GENERIC_READ As Long = &H80000000 Public Const WIM_GENERIC_WRITE As Long = &H40000000 Public Const WIM_CREATE_NEW As Byte = &H1 Public Const WIM_CREATE_ALWAYS As Byte = &H2 Public Const WIM_OPEN_EXISTING As Byte = &H3 Public Const WIM_OPEN_ALWAYS As Byte = &H4 Public Const WIM_COMPRESS_NONE As Byte = 0 Public Const WIM_COMPRESS_XPRESS As Byte = 1 Public Const WIM_COMPRESS_LZX As Byte = 2 Public Const WIM_CREATED_NEW As Byte = 0 Public Const WIM_OPENED_EXISTING As Byte = 1 Public Const WIM_FLAG_RESERVED As Byte = &H1 Public Const WIM_FLAG_VERIFY As Byte = &H2 Public Const WIM_FLAG_INDEX As Byte = &H4 Public Const WIM_FLAG_NO_APPLY As Byte = &H8 Public Const WIM_FLAG_NO_DIRACL As Byte = &H10 Public Const WIM_FLAG_NO_FILEACL As Byte = &H20 Public Const WIM_FLAG_SHARE_WRITE As Byte = &H40 Public Const WIM_FLAG_FILEINFO As Byte = &H80 Public Const WIM_FLAG_NO_RP_FIX As Integer = &H100 Public Const WIM_REFERENCE_APPEND As Long = &H10000 Public Const WIM_REFERENCE_REPLACE As Long = &H20000 Public Const WIM_EXPORT_ALLOW_DUPLICATES As Byte = &H1 Public Const WIM_EXPORT_ONLY_RESOURCES As Byte = &H2 Public Const WIM_EXPORT_ONLY_METADATA As Byte = &H4 Public Const INVALID_CALLBACK_VALUE As Long = &HFFFFFFFF Public Const WIM_COPY_FILE_RETRY As Long = &H1000000 Public Const WIM_MSG_SUCCESS As Byte = 0& Public Const WIM_MSG_DONE As Long = &HFFFFFFF0 Public Const WIM_MSG_SKIP_ERROR As Long = &HFFFFFFFE Public Const WIM_MSG_ABORT_IMAGE As Long = &HFFFFFFFF Public Const WIM_ATTRIBUTE_NORMAL As Byte = &H0 Public Const WIM_ATTRIBUTE_RESOURCE_ONLY As Byte = &H1 Public Const WIM_ATTRIBUTE_METADATA_ONLY As Byte = &H2 Public Const WIM_ATTRIBUTE_VERIFY_DATA As Byte = &H4 Public Const WIM_ATTRIBUTE_RP_FIX As Byte = &H8 Public Const WIM_ATTRIBUTE_SPANNED As Byte = &H10 Public Const WIM_ATTRIBUTE_READONLY As Byte = &H20 Delete lHandle = WIMCreateFile(ConvertToUniCode("Path_To_Wim"), WIM_GENERIC_WRITE, WIM_OPEN_EXISTING, WIM_FLAG_SHARE_WRITE, WIM_COMPRESS_XPRESS, 0) WIMSetTemporaryPath(lHandle, ConvertToUniCode(oWSHShell.ExpandEnvironmentStrings("%Temp%"))) WIMDeleteImage(lHandle, cmbImageNumber.Text) WIMCloseHandle (lHandle) Mount WIMMountImage(ConvertToUniCode("Path_To_Mount"), ConvertToUniCode("Path_To_Wim"), ImageNumber, ConvertToUniCode("Path_To_Temp")) Unmount WIMUnmountImage(ConvertToUniCode("Path_To_Mount"), ConvertToUniCode("Path_To_Wim"), ImageNumber, True/FalseSaveChanges)) Get Number of Images in WIM file lHandle = WIMCreateFile(ConvertToUniCode("Path_To_Wim"), WIM_GENERIC_WRITE, WIM_OPEN_EXISTING, WIM_FLAG_SHARE_WRITE, WIM_COMPRESS_XPRESS, 0) iNumberOfImages = WIMGetImageCount(lHandle) WIMCloseHandle (lHandle)
  18. The computer you use has no bearing on the end result. Just change the HAL before you sysprep.
  19. 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)
  20. Just run Windows Deployment Services Legacy, %SystemRoot%\system32\risetup.exe. You can just convert the RIS images to WIM via WDSUTIL /convert
  21. If anyone else needs it, I finally got something working. Set oShare = GetObject("winmgmts:\\.\root\CIMV2").Get("Win32_UserProfile.SID=""" & sSIDLocal & """") Set oInParam = oShare.Methods_("ChangeOwner").InParameters.SpawnInstance_() oInParam.Properties_.Item("Flags") = 0 oInParam.Properties_.Item("NewOwnerSID") = sSIDDomain Set oOutParams = GetObject("winmgmts:\\.\root\CIMV2").ExecMethod("Win32_UserProfile.SID=""" & sSIDLocal & """", "ChangeOwner", oInParam) After that, to make it 'just like' MoveUser (at least how I use it here), delete the local account. Set oAccount = GetObject("winmgmts:\\.\root\cimv2:Win32_UserAccount.Name=""" & sLocalUserID & """") Set oUserProfile = GetObject("winmgmts:\\.\root\cimv2:Win32_UserProfile.SID='" & oAccount.SID & "'") If MsgBox("Are you sure you want to delete " & frmMain.cmbLocalUserID.Text, vbYesNo) = vbYes Then oUserProfile.Delete_ End If
  22. The MS documentation is super poor. They call it a direct replacement and then the only example they cite using it... is delete. Has anyone gotten it to work like MoveUser? I'm refering to this. http://support.microsoft.com/kb/930955
  23. I could never find a way for this to work either, so I just have a lookup table that determines it for everything we currently have deployed. As new models come through, I add them into the lookup table. If there is ever a model that I don't know what it is, then I assume it is a desktop and if it is a ChassisTypes 8-14 then I say it is a laptop and prompt the user for if it is a tablet or not.
  24. I see this behavior on devices that boot older WINPE versions in USB2.0 mode and now no longer boot in USB2.0 mode for the new WINPE. Sucks that the devices are just barely not Vista capable, so it will never get fixed.
×
×
  • Create New...