After some more testing I believe I found a work-around by building a BCD that will restrict WinPE to one CPU.
This is the script I created to build my custom BCD:
Code:
@ECHO OFF
SETLOCAL
IF /I {%1} EQU {debug} SET BCDDEBUG=TRUE
IF EXIST wimboot_bcd DEL /F /Q wimboot_bcd
bcdedit -createstore wimboot_bcd
SET BCDEDIT=bcdedit -store wimboot_bcd
REM This BCD is specifically for use with Wimboot and WinPE. It will force WinPE to use only one CPU.
:RAMDISKOPTIONS
REM No description for ramdiskoptions!
%BCDEDIT% -create {ramdiskoptions}
%BCDEDIT% -set {ramdiskoptions} ramdisksdidevice boot
%BCDEDIT% -set {ramdiskoptions} ramdisksdipath \Boot\boot.sdi
:WINPE
for /f "tokens=3" %%i in ('%BCDEDIT% -create -d "WIMBOOT WinPE" -application osloader') do set GUID1=%%i
%BCDEDIT% -set %GUID1% systemroot \Windows
%BCDEDIT% -set %GUID1% detecthal Yes
%BCDEDIT% -set %GUID1% winpe Yes
%BCDEDIT% -set %GUID1% osdevice ramdisk=[boot]\Boot\boot.wim,{ramdiskoptions}
%BCDEDIT% -set %GUID1% device ramdisk=[boot]\Boot\boot.wim,{ramdiskoptions}
%BCDEDIT% -set %GUID1% onecpu on
:BOOTMGR
%BCDEDIT% -create {bootmgr} -d "Windows Boot Manager"
%BCDEDIT% -set {bootmgr} timeout 30
%BCDEDIT% -set {bootmgr} default %GUID1%
%BCDEDIT% -set {bootmgr} displayorder %GUID1%
IF /I {%BCDDEBUG%} EQU {TRUE} (
ECHO.
ECHO Debug options included
%BCDEDIT% -create {dbgsettings}
%BCDEDIT% -dbgsettings SERIAL DEBUGPORT:1 BAUDRATE:115200 -start AUTOENABLE
%BCDEDIT% -bootdebug {bootmgr} on
%BCDEDIT% -bootdebug %GUID1% on
%BCDEDIT% -debug %GUID1% on
)
:VIEW_FINAL
%BCDEDIT% -enum all -v
ECHO.
ECHO Your new BCD file is called wimboot_bcd. Rename it to whatever you need.
ENDLOCAL
The important line is the one with 'set onecpu on'. This makes it so that WinPE only sees one CPU. For the purpose of WinPE (at least in my case) that is completely fine.
I have tested this on VMware hardware type 10 and 11 with more than one vCPU and the BSoD is no longer happening.