NOTE: This issue has been subsequently fixed in KB237901 for Windows Vista/Server 2008 SP2 (x86 and x64). The blog entry is left for reference.
This is a quick update to my previous blog entry http://blogs.technet.com/mrsnrub/archive/2009/11/19/http-sys-cryptographic-services-lsass-exe-deadlock.aspx.
Note that there was a typo (now fixed) in the first release in the Rapid Publishing article I pointed to, in the Resolution section: ”HKLM\CurrentControlSet\Serivces\HTTP” should have read: ”HKLM\SYSTEM\CurrentControlSet\Services\HTTP”
Also, for your convenience I have made a quick & dirty Powershell script to add the dependency to the local registry if it is not present – be aware that you will need to allow the execution of unsigned scripts with “set-executionpolicy RemoteSigned” before trying to run it.
Use this script at your own risk – I’ve tested it very briefly but there is no error checking or backing up of the key/value performed.
Why a Powershell script rather than a .reg file to double-click? This preserves the DependOnService value in case it is already present and contains data, plus it can be modified to run remotely if needed (by modifying $sComputerName).
$sComputerName = '.'
# Check the version of the OS is exactly 6.0, or the workaround does not apply $oWin32OS = Get-WmiObject -class Win32_OperatingSystem -namespace "root\CIMV2" -computername $sComputerName $sVerMajor = $oWin32OS.Version[0] $sVerMinor = $oWin32OS.Version[2] If (($sVerMajor -ne '6') -or ($sVerMinor -ne '0')) { Write-Host "This script is intended only for Windows Server 2008 (NT 6.0), aborting." Exit }
$sKey = "SYSTEM\\CurrentControlSet\\Services\\HTTP" $sSvc = "DependOnService" $sDepend = "CryptSvc"
# Connect to local registry $reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $sComputerName)
# Open HTTP service key $regKey = $reg.OpenSubKey($sKey, $True)
# Get the current contents of value 'DependOnService', if it exists $aSvcs = $regKey.GetValue($sSvc)
If ($aSvcs -eq $null) { # Value does not exist, we need to create it with our 1 dependency [string[]]$aSvcs = @($sDepend) $regKey.SetValue($sSvc, $aSvcs, 'MultiString') } else { # Value does exist, we need to check if the dependency is already set $bDependencyExists = $False ForEach ($a in $aSvcs) { If ($a -eq $sDepend) { $bDependencyExists = $True } }
# Only if it is not already present do we add it to the array and update the value If (!$bDependencyExists) { $aSvcs += $sDepend $regKey.SetValue($sSvc, $aSvcs, 'MultiString') } }