CRITICAL_PROCESS_DIED

While working on a Windows 10 upgrade project for a company, it was observed that numerous machines were failing with CRITICAL_PROCESS_DIED. A critical service would crash in the SECOND_BOOT phase between 80-90% of total progress.  This resulted in bugcheck 0xEF.  The root cause in my organization was the value of MachineLaunchRestriction being abnormally large.  It was larger than 65535/FFFF.

To determine your value, you can use PowerShell: 

$regItem = Get-ItemProperty -Path REGISTRY::HKLM\Software\Microsoft\Ole -Name MachineLaunchRestriction $regItem.MachineLaunchRestriction.Length

Above is the output of the PowerShell.  The value of MachineLaunchRestriction is outlined in red.  If your output is larger than 65535, you can remediate by running the following PowerShell:

# Set Variables

$dir = Test-Path – Path C:\regbu\ole

# Make Directory if it doesn’t exist

if(!$dir){
mkdir C:\regbu\old
}

# Backup Registry in case it hits the fan

reg export “HKEY_LOCAL_MACHINE\Software\Microsoft\Ole” C:\regbu\ole\hklmsoftMSole.reg /y

# Delete the key /f forces this

reg delete HKEY_LOCAL_MACHINE\Software\Microsoft\Ole /v MachineLaunchRestriction /f