Jump to content

cluberti

Patron
  • Posts

    11,045
  • Joined

  • Last visited

  • Donations

    0.00 USD 
  • Country

    country-ZZ

Everything posted by cluberti

  1. Returns a time and date string - I use it when creating folders, usually. For example, the following line of script...: WScript.Echo ScriptHelper.GetTimeStampString...produces the following output: 09_22_2010__14_12_50 Here's an example snippet of how I tend to use it: '// Gets the local computer name strComputer = ScriptHelper.Network.ComputerName '// Creates a string with the local computer name and the time/date, no spaces strDataFold = strComputer & "_" & ScriptHelper.GetTimeStampString '// Creates a string that paths to the current directory where the script is running, + "Folder", + the computername/time/date string folder: strLocalDataStore = ScriptHelper.ScriptPath() & "\Folder\" & strDataFold '// Creates the folder using the above string if it doesn't already exist: If Not ScriptHelper.FileSystem.FolderExists(strLocalDataStore) Then ScriptHelper.CreateFolder(strLocalDataStore) Else 'The folder already exists End If So, with the script run from the desktop logged on as a user named "User", on a computer named "COMPUTERNAME", strLocalDataStore... WScript.Echo "strLocalDataStore: " & strLocalDataStore...would be: strLocalDataStore: C:\Users\User\Desktop\Folder\COMPUTERNAME_09_22_2010__14_24_56
  2. OK, I've cleaned up your code and removed the irrelevant bits. I've also made it faster (and easier for you to script against) by adding an updated version of my ScriptHelper class. Here's the updated script - I cannot verify that it will work in your environment 100%, but I did create a dummy .msi and put it on a Z drive (in that path) and it worked fine. Code: '// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ '// '// NAME: Verdiem_Surveyor_Client_Install.vbs '// '// Original: clivebuckwheat @ MSFN Forums '// Updated: cluberti @ MSFN Forums '// Last Update: 21st September 2010 '// Version: 2.1 '// '// '// Comment: Installs Verdiem Surveyor Client.msi '// '// NOTE: Provided as-is - usage of this source assumes that you are at the '// very least familiar with the vbscript language being used and '// the tools used to create and debug this file. '// '// In other words, if you break it, you get to keep the pieces. '// '// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ '// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ '// '// Ensure that cscript is the engine used to run this script, and that we have an admin token Dim ScriptHelper Set ScriptHelper = New ScriptHelperClass ScriptHelper.RunMeWithCscript() 'ScriptHelper.ElevateThisScript() '// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ '// '// Set variables CONST wbemFlagReturnImmediately = &h10 CONST wbemFlagForwardOnly = &h20 strComputer = ScriptHelper.Network.ComputerName Arch = "" Set colOSItems = ScriptHelper.WMI.ExecQuery( _ "SELECT * FROM Win32_OperatingSystem",,48) Set colServices = ScriptHelper.WMI.ExecQuery( _ "SELECT * FROM Win32_Service", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly) '//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ '// '// Get OS Architecture from WMI: For Each objOSItem in colOSItems If objOSItem.BuildNumber => 6000 Then 'Vista/Win7 - Get 32-bit or 64-bit directly from WMI: Arch = objOSItem.OSArchitecture Else 'Not Vista or Win7 - check XP or 2003 the hard way: If objOSItem.BuildNumber = 2600 Then 'x86 XP - build 2600 is only x86: Arch = "32-bit" ElseIf objOSItem.BuildNumber = 3790 Then 'Build 3790 could be x64 XP/2003 or x86 2003 - check further: If Not ScriptHelper.FileSystem.FolderExists(ScriptHelper.Environment.ProgramFilesX86) Then 'x86 2003 Arch = "32-bit" Else 'x64 XP/2003 Arch = "64-bit" End If End If End If Next '//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ '// '// Check for the existence of the Verdiem Surveyor Client service: For Each objService In colServices If objService.DisplayName = "Verdiem Surveyor Client" Then If objService.State <> "Running" Then Return = objService.StartService() If Return <> 0 Then WScript.Echo "Service installed but could not be started. Result = " & Return WScript.Echo "" End if Else WScript.Echo "Service installed and running - exiting script" WScript.Quit End If Else 'Service is not installed - continuing new installation End If Next '//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ '// '// Install the x86 or x86-64 version of the client based on Arch: If Arch = "32-bit" Then WScript.Echo "Installing the " & Arch & " version of Verdiem Surveyor Client..." WScript.Echo "" Set isRunning = ScriptHelper.Shell.Exec("msiexec /i ""Z:\VerdiemSurveyor\Clientx86\Verdiem Surveyor Client.msi"" /qb SERVER_NAME=myservername.ca SERVER_PORT=5600") Do While isRunning.Status = 0 WScript.Sleep 100 execOutput = isRunning.StdOut.ReadAll Loop ElseIf Arch = "64-bit" Then WScript.Echo "Installing the " & Arch & " version of Verdiem Surveyor Client..." WScript.Echo "" Set isRunning = ScriptHelper.Shell.Exec("msiexec /i ""Z:\VerdiemSurveyor\Clientx64\Verdiem Surveyor Client.msi"" /qb SERVER_NAME=myservername.ca SERVER_PORT=5600") Do While isRunning.Status = 0 WScript.Sleep 100 execOutput = isRunning.StdOut.ReadAll Loop Else WScript.Echo "Well, the script got this far, but still failed. Contact your administrator if you see this message!" End if '// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ '// '// ScriptHelperClass and EnvironmentClass are helper classes to simplIfy '// script work. Declare and use globally throughout the script. '// '// Example code: '// ============= '// '// Option Explicit '// Dim ScriptHelper '// Set ScriptHelper = New ScriptHelperClass '// '// ScriptHelper.RunMeWithCScript() '// ScriptHelper.ElevateThisScript() '// '// WScript.StdOut.Write vbCrLf & "User profile : " & ScriptHelper.Environment.UserProfile '// WScript.StdOut.Write vbCrLf & "Domain : " & ScriptHelper.Network.UserDomain '// ScriptHelper.CreateFolder "\\SERVER\Share\Folder\With\Path" '// ScriptHelper.FileSystem.FileExists("C:\command.com") '// ScriptHelper.Shell.RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ProductOptions\ProductType") '// '// '// All current members: '// ==================== '// '// ScriptHelper.FileSystem: "Scripting.FileSystemObject" '// ScriptHelper.Network: "WScript.Network" '// ScriptHelper.Shell: "WScript.Shell" '// ScriptHelper.ShellApp: "Shell.Application" '// ScriptHelper.WMI: "WbemScripting.SWbemLocator" (root\cimv2) '// ScriptHelper.Registry: "winmgmts:{impersonationLevel=impersonate}!\\" & strComputerName & "\root\default:StdRegProv" '// '// ScriptHelper.ScriptPath: "FileSystem.GetFile(WScript.ScriptFullName).ParentFolder" '// ScriptHelper.GetTimeStampString Returns a time and date string with leading zeroes '// ScriptHelper.GetCurrentUserSID: "WMI.ExecQuery("SELECT * FROM Win32_UserAccount WHERE Name = '" & Network.Username & "' AND Domain = '" & Network.UserDomain & "'", , 48)" '// ScriptHelper.CreateFolder(strFldPath): "FileSystem.CreateFolder(strDestFold)" '// ScriptHelper.DeleteFolder(strFldPath): "FileSystem.DeleteFolder strFldPath, True" '// ScriptHelper.DrawProgress: "WScript.StdOut.Write ChrW(8) & "|" (or "/", "-", and "\" - progress bar "spinner")" '// ScriptHelper.ClearProgress: "WScript.StdOut.Write ChrW(8) & "done." (replaces "spinner" with the text "done.")" '// '// ScriptHelper.RunMeWithCscript: Runs script in cscript - If running under WScript, spawns script as a new process under cscript '// ScriptHelper.ElevateThisScript: Runs script under admin context, causes UAC / Permission prompt If running as non-admin '// ScriptHelper.PrintMsg(strMessage) Prints strMessage to screen by calling "WScript.StdOut.Write vbCrLf & strMessage" '// '// ScriptHelper.Environment.LogonServer: "GetEnvironmentValue("%LOGONSERVER%")" '// ScriptHelper.Environment.ProgramFiles: "GetEnvironmentValue("%PROGRAMFILES%")" '// ScriptHelper.Environment.ProgramFilesX86: "GetEnvironmentValue("%PROGRAMFILES(x86)%")" '// ScriptHelper.Environment.UserProfile: "GetEnvironmentValue("%USERPROFILE%")" '// ScriptHelper.Environment.AllUsersProfile: "GetEnvironmentValue("%ALLUSERSPROFILE%")" '// ScriptHelper.Environment.WinDir: "GetEnvironmentValue("%WINDIR%")" '// ScriptHelper.Environment.TempDir: "GetEnvironmentValue("%TEMP%")" '// ScriptHelper.Environment.SMSPKDG: "GetEnvironmentValue("%SMSPKGD%")" '// '// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Class ScriptHelperClass Private objEnvironment Private objFileSystem Private objNetwork Private objShell Private objShellApp Private objSWBemlocator Private objWMI Private objRegistry Private currentProgress Public Computer Public Property Get Environment If objEnvironment Is Nothing Then Set objEnvironment = New EnvironmentClass objEnvironment.Shell = Shell End If Set Environment = objEnvironment End Property Public Property Get FileSystem If objFileSystem Is Nothing Then Set objFileSystem = CreateObject("Scripting.FileSystemObject") Set FileSystem = objFileSystem End Property Public Property Get Network If objNetwork Is Nothing Then Set objNetwork = CreateObject("WScript.Network") Set Network = objNetwork End Property Public Property Get Shell If objShell Is Nothing Then Set objShell = CreateObject("WScript.Shell") Set Shell = objShell End Property Public Property Get ShellApp If objShellApp Is Nothing Then Set objShellApp = CreateObject("Shell.Application") Set ShellApp = objShellApp End Property Public Property Get WMI If objWMI Is Nothing Then On Error Resume Next Set objSWBemlocator = CreateObject("WbemScripting.SWbemLocator") Set objWMI = objSWBemlocator.ConnectServer(Computer, "root\CIMV2") objWMI.Security_.ImpersonationLevel = 3 On Error Goto 0 End If Set WMI = objWMI End Property Public Property Get Registry If objRegistry Is Nothing Then Set objRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputerName & "\root\default:StdRegProv") Set Registry = objRegistry End Property Private Sub Class_Initialize() Computer = "." Set objEnvironment = Nothing Set objFileSystem = Nothing Set objNetwork = Nothing Set objShell = Nothing Set objShellApp = Nothing Set objSWBemlocator = Nothing Set objWMI = Nothing Set objRegistry = Nothing currentProgress = 0 End Sub Private Sub Class_Terminate Set objRegistry = Nothing Set objWMI = Nothing Set objSWBemlocator = Nothing Set objShell = Nothing Set objShellApp = Nothing Set objNetwork = Nothing Set objFileSystem = Nothing Set objEnvironment = Nothing End Sub Public Property Get ScriptPath() ScriptPath = FileSystem.GetFile(WScript.ScriptFullName).ParentFolder End Property Public Function GetCurrentUserSID() Dim intCount, colItems, objItem, strSID Set colItems = WMI.ExecQuery("SELECT * FROM Win32_UserAccount WHERE Name = '" & Network.Username & "' AND Domain = '" & Network.UserDomain & "'", , 48) intCount = 0 For Each objItem In colItems strSID = CStr(objItem.SID) intCount = intCount + 1 Next If intCount > 0 Then GetCurrentUserSID = strSID Else GetCurrentUserSID = "NOTFOUND" End If End Function Public Sub CreateFolder(strFldPath) Dim fldArray, x, intStartIndex, blnUNC, strDestFold strDestFold = "" If Left(strFldPath, 2) = "\\" Then blnUNC = True intStartIndex = 3 'Start at the first folder in UNC path Else blnUNC = False intStartIndex = 0 End If fldArray = Split(strFldPath, "\") 'Split folders into array If fldArray(intStartIndex) = "" Then Exit Sub For x = intStartIndex To UBound(fldArray) If strDestFold = "" Then If blnUNC Then strDestFold = "\\" & fldArray(x -1) & "\" & fldArray(x) 'Prefix UNC with server and share Else strDestFold = fldArray(x) End If Else strDestFold = strDestFold & "\" & fldArray(x) 'Append each folder to end of path End If If Not FileSystem.FolderExists(strDestFold) Then FileSystem.CreateFolder(strDestFold) Next End Sub Public Sub DeleteFolder(strFldPath) If FileSystem.FolderExists(strFldPath) Then FileSystem.DeleteFolder strFldPath, True End Sub Public Sub DrawProgress() Select Case currentProgress Case 0, 4 WScript.StdOut.Write ChrW(8) & "|" Case 1, 5 WScript.StdOut.Write ChrW(8) & "/" Case 2, 6 WScript.StdOut.Write ChrW(8) & "-" Case 3, 7 WScript.StdOut.Write ChrW(8) & "\" End Select currentProgress = currentProgress + 1 If currentProgress = 8 Then currentProgress = 0 End Sub Public Sub ClearProgress() currentProgress = 0 WScript.StdOut.Write ChrW(8) & "done." End Sub Public Sub RunMeWithCScript() Dim ScriptEngine, engineFolder, Args, arg, scriptName, argString, scriptCommand ScriptEngine = UCase(Mid(WScript.FullName, InstrRev(WScript.FullName, "\") + 1)) engineFolder = Left(WScript.FullName, InstrRev(WScript.FullName, "\")) argString = "" If ScriptEngine = "WSCRIPT.EXE" Then Dim Shell Set Shell = CreateObject("WScript.Shell") Set Args = WScript.Arguments For Each arg in Args 'loop though argument array as a collection to rebuild argument string If InStr(arg, " ") > 0 Then arg = """" & arg & """" 'If the argument contains a space wrap it in double quotes argString = argString & " " & Arg Next 'Create a persistent command prompt for the cscript output window and call the script with its original arguments scriptCommand = "cmd.exe /k " & engineFolder & "cscript.exe """ & WScript.ScriptFullName & """" & argString Shell.Run scriptCommand, , False WScript.Quit Else Exit Sub 'Already Running with Cscript Exit this Subroutine End If End Sub Public Sub ElevateThisScript() Const HKEY_CLASSES_ROOT = &H80000000 Const HKEY_CURRENT_USER = &H80000001 Const HKEY_LOCAL_MACHINE = &H80000002 Const HKEY_USERS = &H80000003 Const KEY_QUERY_VALUE = 1 Const KEY_SET_VALUE = 2 Dim ScriptEngine, engineFolder, argString, arg, Args, scriptCommand, HasRequiredRegAccess Dim objShellApp Set objShellApp = CreateObject("Shell.Application") ScriptEngine = UCase(Mid(WScript.FullName, InstrRev(WScript.FullName, "\") + 1)) engineFolder = Left(WScript.FullName, InstrRev(WScript.FullName, "\")) argString = "" Set Args = WScript.Arguments For Each arg in Args 'loop though argument array as a collection to rebuild argument string If InStr(arg, " ") > 0 Then arg = """" & arg & """" 'If the argument contains a space wrap it in double quotes argString = argString & " " & Arg Next scriptCommand = engineFolder & ScriptEngine Dim objReg, bHasAccessRight Set objReg = GetObject("winmgmts:"_ & "{impersonationLevel=impersonate}!\\" &_ Computer & "\root\default:StdRegProv") 'Check for administrative registry access rights objReg.CheckAccess HKEY_LOCAL_MACHINE, "System\CurrentControlSet\Control\CrashControl", _ KEY_SET_VALUE, bHasAccessRight If bHasAccessRight = True Then HasRequiredRegAccess = True Exit Sub Else HasRequiredRegAccess = False objShellApp.ShellExecute scriptCommand, " """ & WScript.ScriptFullName & """" & argString, "", "runas" WScript.Quit End If End Sub Function AddZero(ByRef strInt1) If (Len(strInt1) < 2) Then strInt1 = "0" & CStr(strInt1) End If AddZero = strInt1 End Function Function GetTimeStampString() Dim sMon, sDay, sYear, sHour, sMin, sSec sMon = AddZero(Month(Now)) sDay = AddZero(Day(Now)) sYear = AddZero(Year(Now)) sHour = AddZero(Hour(Now)) sMin = AddZero(Minute(Now)) sSec = AddZero(Second(Now)) GetTimeStampString = sMon&"_"&sDay&"_"&sYear&"__"&sHour&"_"&sMin&"_"&sSec End Function Sub PrintMsg(strMessage) WScript.StdOut.Write vbCrLf & strMessage End Sub End Class Class EnvironmentClass Private objShell Private strLogonServer Private strProgramFiles Private strProgramFilesX86 Private strUserProfile Private strAllUsersProfile Private strWinDir Private strTempDir Private Function GetEnvironmentValue(environmentVariable) Dim fValue fValue = objShell.ExpandEnvironmentStrings(environmentVariable) GetEnvironmentValue = Replace(fValue, environmentVariable, "") End Function Public Cache Public Property Let Shell(objParentShell) Set objShell = objParentShell End Property Public Property Get LogonServer If IsNull(strLogonServer) OR Cache = False Then strLogonServer = GetEnvironmentValue("%LOGONSERVER%") LogonServer = strLogonServer End Property Public Property Get ProgramFiles If IsNull(strProgramFiles) OR Cache = False Then strProgramFiles = GetEnvironmentValue("%PROGRAMFILES%") ProgramFiles = strProgramFiles End Property Public Property Get ProgramFilesX86 If IsNull(strProgramFilesX86) OR Cache = False Then strProgramFilesX86 = GetEnvironmentValue("%PROGRAMFILES(x86)%") ProgramFilesX86 = strProgramFilesX86 End Property Public Property Get UserProfile If IsNull(strUserProfile) OR Cache = False Then strUserProfile = GetEnvironmentValue("%USERPROFILE%") UserProfile = strUserProfile End Property Public Property Get AllUsersProfile If IsNull(strAllUsersProfile) OR Cache = False Then strAllUsersProfile = GetEnvironmentValue("%ALLUSERSPROFILE%") AllUsersProfile = strAllUsersProfile End Property Public Property Get WinDir If IsNull(strWinDir) OR Cache = False Then strWinDir = GetEnvironmentValue("%WINDIR%") WinDir = strWinDir End Property Public Property Get TempDir If IsNull(strTempDir) OR Cache = False Then strTempDir = GetEnvironmentValue("%TEMP%") TempDir = strTempDir End Property Private Sub Class_Initialize() Cache = True strLogonServer = Null strProgramFiles = Null strProgramFilesX86 = Null strUserProfile = Null strAllUsersProfile = Null strWinDir = Null strTempDir = Null End Sub End Class
  3. Lag in RDP is usually network-related, either client or server (if either side has high latency, you generally get the stutter at both ends due to the way RDP works over virtual "channels" and RPC).
  4. You need to start adding alerts to your script to help debug - again, I don't know where it would fail (can't run it here, obviously), but that would help. I'll take a deeper look later if I get the chance, because that script seems overly complicated for what you're trying to do, which is simple.
  5. Moving to Win7 unattended. Might help to post in the right section first.
  6. Ah yes, the dreaded XP castrated. I'm not entirely sure how to view those short of using DaRT, which isn't available without a Microsoft VL license for Windows + Software Assurance (SA). You could try using ntpasswd to see if you can get to it offline, but you might also want to consider that there could be some potential malware on there as well - seems very odd behavior for a user account. I'm also not entirely sure of the legality of this, but lusrmgr.msc from an XP Pro machine may work if you have all the binaries copied over that it requires (might need to use depends to figure that out).
  7. Yes - any registry or filesystem repair happens during that portion of the boot, and disabling the video driver for that portion (that is what you are effectively doing) simply moves the driver load out, and leaves you without any info just as you would miss in XP. It's one of those things that *can* improve boot speed if the driver is slow to load, but it's just not worth the few seconds you'd save. It's better to use xperf to get a trace and actually visualize the boot performance (as Andre is suggesting) rather than troubleshoot by effectively throwing noodles at the wall to see what sticks. Guessing sometimes works, but can have unwanted side-effects if you don't understand the problem in the first place.
  8. If you open a cmd prompt from within the PE image (shift+f10) and run ipconfig, do you have a valid IP address? Also, can you ping the IP of the WDS server? This step isn't necessary (you'll still have a copy on the second partition on your machine), but it is good to get working.
  9. Just review your CBS logs from installing a Win7 RTM image, and see what happens. Not everything is actually 'installed' and ready in the image until it's actually been run for the first time.
  10. The LTI wizard will look like it always does until you choose the sysprep and capture task you create. It'll change after that. If you've already done this, you can just add a basic Win7 boot.wim image as a boot image to WDS, right-click on it and create a capture image, and then add that to your WDS boot images. You can use the capture image to capture a Win7 machine that's already sysprep'ed - you don't need MDT for that (it's easier to do with MDT if you create a TS, but that's neither here nor there if you've already sysprep'ed your image).
  11. Create a sysprep and capture task sequence in MDT, and use that (you need to map a drive to the deploymentshare$ folder that contains the TS, and manually run \scripts\LiteTouch.wsf to launch the wizard). Note that you'll lose your domain membership (sysprep will kill it), and any user-specific configuration (although you can use the copyprofile section of the answer file to save most of that when re-deployed).
  12. Because you're not just copying files, you're staging them as well. There *are* updates pending (technically binary staging) in an offline image, even an RTM image - this is one of the reasons the only really reliable way to do this is to use reverse-integration. We don't have access to source and thus cannot just *build* an SP<insert version here>-level build of Windows like Microsoft can, but we can do what is arguably the same exact thing by installing and cleaning, then running sysprep.
  13. Hey Breez, welcome to MSFN. I had to remove your signature because it violates rule #5 here, and we're pretty strict about our rules compared to other sites: We get a lot of users from various parts of the world where dial-up speeds are as fast as they can get to the internet, so we have a few rules devoted specifically to signature size, avatar size, and posting screenshot sizes. I've removed your signature for now, but if you have one that complies with rule 5, please feel free to use it. Thank you in advance.
  14. @IceyBurnz: Enabling driver verifier and getting a dump the next time it occurs might be a good thing to try at this point, although in XP it's not as easy to do as it is with Win7 or Vista. Some driver (hopefully not sr.sys, as even SP3 still uses the old August 2004 driver from SP2) is definitely causing this, but it's up to you how far you want to go to troubleshoot it. Let me know how disabling SR goes.
  15. Looks like the system restore filter driver is consuming your kernel nonpaged pool, and running your system out of kernel nonpaged pool memory causing further allocations to fail (and since it's a kernel driver, it can cause a bugcheck when a critical allocation fails): // It was indeed an F4 bugcheck: kd> .bugcheck Bugcheck code 000000F4 Arguments 00000003 82ba4108 82ba427c 805c874a // The error was an I/O inpage error, due to lack of resources to handle the request: kd> .exr 0xfffffffff87c59d8 ExceptionAddress: 75b7b1c1 (winsrv!UserHardError) ExceptionCode: c0000006 (In-page I/O error) ExceptionFlags: 00000000 NumberParameters: 3 Parameter[0]: 00000008 Parameter[1]: 75b7b1c1 Parameter[2]: c000009a Inpage operation failed at 75b7b1c1, due to I/O error c000009a // Indeed, not enough of some resource to handle the API request: kd> !error c000009a Error code: (NTSTATUS) 0xc000009a (3221225626) - Insufficient system resources exist to complete the API. // Looking at virtual memory, you're basically out of nonpaged pool: kd> !vm *** Virtual Memory Usage *** Physical Memory: 130668 ( 522672 Kb) Page File: \??\C:\pagefile.sys Current: 784008 Kb Free Space: 484656 Kb Minimum: 784008 Kb Maximum: 1568016 Kb Available Pages: 6647 ( 26588 Kb) ResAvail Pages: 76942 ( 307768 Kb) Locked IO Pages: 71 ( 284 Kb) Free System PTEs: 247397 ( 989588 Kb) Free NP PTEs: 0 ( 0 Kb) Free Special NP: 0 ( 0 Kb) Modified Pages: 563 ( 2252 Kb) Modified PF Pages: 563 ( 2252 Kb) NonPagedPool Usage: 32739 ( 130956 Kb) NonPagedPool Max: 32768 ( 131072 Kb) ********** Excessive NonPaged Pool Usage ***** PagedPool 0 Usage: 4411 ( 17644 Kb) PagedPool 1 Usage: 1110 ( 4440 Kb) PagedPool 2 Usage: 1059 ( 4236 Kb) PagedPool Usage: 6580 ( 26320 Kb) PagedPool Maximum: 43008 ( 172032 Kb) ********** 9315 pool allocations have failed ********** Session Commit: 2103 ( 8412 Kb) Shared Commit: 1539 ( 6156 Kb) Special Pool: 0 ( 0 Kb) Shared Process: 3590 ( 14360 Kb) PagedPool Commit: 6580 ( 26320 Kb) Driver Commit: 2826 ( 11304 Kb) Committed pages: 192240 ( 768960 Kb) Commit limit: 318306 ( 1273224 Kb) ... // Looking at the top consumers of nonpaged pool, the driver that is consuming memory uses the tag SrFE: kd> !poolused 2 Sorting by NonPaged Pool Consumed NonPaged Paged Tag Allocs Used Allocs Used SrFE 4294967294 4294967216 4294967295 4294966264 File information buffer , Binary: sr.sys Irp 243087 108741128 0 0 Io, IRP packets R300 48 1310856 188 5804536 ATI video driver MmCm 21 1073696 0 0 Calls made to MmAllocateContiguousMemory , Binary: nt!mm Devi 333 874552 0 0 Device objects Wdm 831 697248 19 7656 WDM Thre 515 325480 0 0 Thread objects , Binary: nt!ps File 2013 307048 0 0 File objects BaNB 1372 275432 0 0 UNKNOWN pooltag 'BaNB', please update pooltag.txt Wmit 6 270336 0 0 Wmi Trace ... // SrFE belongs to sr.sys: kd> !for_each_module s -a @#Base @#End "SrFE" f84a8bc7 53 72 46 45 68 00 10 00-00 6a 01 ff 15 10 fb 49 SrFEh....j.....I kd> !address f84a8bc7 f849f000 - 00012000 Usage KernelSpaceUsageImage ImageName sr.sys // The sr.sys module appears to be the system restore binary: kd> lmvm sr start end module name f849f000 f84b0f00 sr (deferred) Image path: sr.sys Image name: sr.sys Timestamp: Wed Aug 04 02:06:22 2004 (41107CDE) CheckSum: 00016006 ImageSize: 00011F00 Translations: 0000.04b0 0000.04e4 0409.04b0 0409.04e4 // The thread that threw up the bugcheck: kd> .trap 0xf87c5d64 ErrCode = 00000000 eax=75b7b1c1 ebx=7c901000 ecx=0053feec edx=75b489a0 esi=00000001 edi=0000000c eip=75b7b1c1 esp=0053fed4 ebp=0053fff4 iopl=3 nv up ei pl nz na po nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00003202 winsrv!UserHardError: 001b:75b7b1c1 ?? ??? kd> !thread THREAD 82abada8 Cid 02a4.02bc Teb: 7ffdc000 Win32Thread: e1c468a0 RUNNING on processor 0 Not impersonating DeviceMap e10087c0 Owning Process 0 Image: <Unknown> Attached Process 82ba4108 Image: csrss.exe Wait Start TickCount 3108722 Ticks: 0 Context Switch Count 14773 LargeStack UserTime 00:00:00.328 KernelTime 00:00:00.234 Win32 Start Address 0x00055fff LPC Server thread working on message Id 55fff Start Address CSRSRV!CsrApiRequestThread (0x75b4461a) Stack Init f87c6000 Current f87c5bec Base f87c6000 Limit f87c3000 Call 0 Priority 13 BasePriority 13 PriorityDecrement 0 DecrementCount 16 ChildEBP RetAddr Args to Child f87c5520 805c787b 000000f4 00000003 82ba4108 nt!KeBugCheckEx+0x1b (FPO: [Non-Fpo]) (CONV: stdcall) f87c5544 805c87f5 805c874a 82ba4108 82ba427c nt!PspCatchCriticalBreak+0x75 (FPO: [Non-Fpo]) (CONV: stdcall) f87c5574 8053d438 82ba4350 c0000006 f87c59b0 nt!NtTerminateProcess+0x7d (FPO: [Non-Fpo]) (CONV: stdcall) f87c5574 804ff18d 82ba4350 c0000006 f87c59b0 nt!KiFastCallEntry+0xf8 (FPO: [0,0] TrapFrame @ f87c5584) f87c55f4 804fccb6 ffffffff c0000006 f87c59f8 nt!ZwTerminateProcess+0x11 (FPO: [2,0,0]) f87c59b0 8050041b f87c59d8 00000000 f87c5d64 nt!KiDispatchException+0x3a0 (FPO: [Non-Fpo]) (CONV: stdcall) f87c5d34 80540c91 0053fbe8 0053fc08 00000000 nt!KiRaiseException+0x175 (FPO: [Non-Fpo]) (CONV: stdcall) f87c5d50 8053d438 0053fbe8 0053fc08 00000000 nt!NtRaiseException+0x31 f87c5d50 75b7b1c1 0053fbe8 0053fc08 00000000 nt!KiFastCallEntry+0xf8 (FPO: [0,0] TrapFrame @ f87c5d64) 0053fed0 75b447e6 00000000 0053feec 00000005 winsrv!UserHardError (FPO: [Non-Fpo]) (CONV: stdcall) 0053fff4 00000000 0000007c 00000000 00000000 CSRSRV!CsrApiRequestThread+0x1cc (FPO: [Non-Fpo]) (CONV: stdcall) // It was operating on behalf of another thread in another process: kd> !lpc message 55fff Searching message 55fff in threads ... Client thread 82db43c8 waiting a reply from 55fff Server thread 82abada8 is working on message 55fff Searching thread 82db43c8 in port rundown queues ... Server connection port e1023f68 Name: ApiPort Handles: 1 References: 133 Server process : 82ba4108 (csrss.exe) Queue semaphore : 82c61050 Semaphore state 0 (0x0) The message queue is empty The LpcDataInfoChainHead queue is empty Done. kd> .thread 82db43c8 Implicit thread is now 82db43c8 kd> !thread 82db43c8 THREAD 82db43c8 Cid 0004.003c Teb: 00000000 Win32Thread: 00000000 WAIT: (WrLpcReply) KernelMode Non-Alertable 82db45bc Semaphore Limit 0x1 Waiting for reply to LPC MessageId 00055fff: Current LPC port e1023f68 Not impersonating DeviceMap e10087c0 Owning Process 0 Image: <Unknown> Attached Process 82db67c0 Image: System Wait Start TickCount 3108719 Ticks: 3 (0:00:00:00.046) Context Switch Count 136055 UserTime 00:00:00.000 KernelTime 00:00:02.281 Start Address nt!ExpWorkerThread (0x805348f6) Stack Init f8aca000 Current f8ac9a90 Base f8aca000 Limit f8ac7000 Call 0 Priority 12 BasePriority 12 PriorityDecrement 0 DecrementCount 16 ChildEBP RetAddr Args to Child f8ac9aa8 80500cb0 82db4438 82db43c8 804f9d10 nt!KiSwapContext+0x2e (FPO: [Uses EBP] [0,0,4]) f8ac9ab4 804f9d10 82db4590 82db43c8 805537e0 nt!KiSwapThread+0x46 (FPO: [0,0,0]) (CONV: fastcall) f8ac9adc 80598bb7 00000000 00000011 00000000 nt!KeWaitForSingleObject+0x1c2 (FPO: [Non-Fpo]) (CONV: stdcall) f8ac9b14 80598d03 e1023f68 82c61050 f8ac9b4c nt!LpcpRequestWaitReplyPort+0x43d (FPO: [Non-Fpo]) (CONV: stdcall) f8ac9b2c 8060a781 e1023f68 f8ac9b4c f8ac9b4c nt!LpcRequestWaitReplyPortEx+0x21 (FPO: [Non-Fpo]) (CONV: stdcall) f8ac9cd0 8060a8e2 c0000222 00000001 00000001 nt!ExpRaiseHardError+0x1bd (FPO: [Non-Fpo]) (CONV: stdcall) f8ac9d40 80573241 c0000222 00000001 00000001 nt!ExRaiseHardError+0x13e (FPO: [Non-Fpo]) (CONV: stdcall) f8ac9d74 805349f6 00000000 00000000 82db43c8 nt!IopHardErrorThread+0x53 (FPO: [Non-Fpo]) (CONV: stdcall) f8ac9dac 805c5cf2 00000000 00000000 00000000 nt!ExpWorkerThread+0x100 (FPO: [Non-Fpo]) (CONV: stdcall) f8ac9ddc 80541be2 805348f6 00000001 00000000 nt!PspSystemThreadStartup+0x34 (FPO: [Non-Fpo]) (CONV: stdcall) 00000000 00000000 00000000 00000000 00000000 nt!KiThreadStartup+0x16 Unfortunately, the thread that created the bugcheck itself was working on behalf of another thread that was itself a worker thread for the real failure. I cannot tell you why the system restore driver is consuming all of that pool, but it would not be doing it on it's own - someone or something is causing it to do so. Obviously, you could disable system restore and it should no longer occur, although perhaps you simply have too many system restore points, or something being saved in your restore points is causing it.
  16. Pankaj, if there is a homepage set in policy, it won't matter what you set as the homepage or as the firstrun under HKCU - it will *not* read them, and this is expected behavior. Your posts will not help.
  17. Yes, this can be done. There are tools here to do it, or you can use the WAIK directly via DISM to disable features in an offline WIM. It depends on what you're comfortable with.
  18. Faster to boot, perhaps, but likely not faster in any sort of day-to-day operations (it'll generally benchmark faster on older hardware, but in real-world application of that, it will make little to no difference). In fact, after running both for awhile, Win7 should be faster due to superfetch being smarter about your usage habits.
  19. Technically, all Windows Vista / Windows 7 images are just that - images. Microsoft can make them from their build labs, but it's not wholly different than reverse-integration, really. You'll find a system installed from an MSDN SP1 source to be just about identical to one from a reverse-integration image.
  20. Independent. You can have both types of HTTP connections, and it is really dependent on what the HTTP call is for - for example, an xmlhttp request over http can be synchronous or asynchronous, depending on how it was written. HTTP will behave as it is told to do so by the client and/or server using the protocol for communication, not to mention the encoding, keep-alive, pipelining, etc.
  21. I've never been lucky getting vmware drivers to work from sysprep.xml - I've only had luck using dism to slipstream them into the boot and install wim files directly.
  22. Not really sure with that error code - You might want to modify the task sequence to run your own DiskPart script, because the MDT ones generally have issues with virtual machines (boot camp might not be an actual virtual machine, but there's still a virtualization layer).
  23. Well, not to be a downer, but this is how Vista repairs itself when there is registry corruption. The problem is XP is still based on NT3, which is incapable of handling this during boot and it must be done offline.
×
×
  • Create New...