I managed to get WinPE to reboot by calling NtShutdownSystem, exported from NTDLL.DLL something like this: typedef enum _SHUTDOWN_ACTION { ShutdownNoReboot, ShutdownReboot, ShutdownPowerOff } SHUTDOWN_ACTION; typedef DWORD (WINAPI* lpNtShutdownSystem)(SHUTDOWN_ACTION Action); HMODULE hNTDLL = LoadLibrary("NTDLL.DLL"); if (hNTDLL) { lpNtShutdownSystem NtShutdownSystem = (lpNtShutdownSystem)GetProcAddress(hNTDLL, "NtShutdownSystem"); if (NtShutdownSystem) { if (msg.wParam & EWX_SHUTDOWN) NtShutdownSystem((msg.wParam & EWX_POWEROFF) ? ShutdownPowerOff : ShutdownNoReboot); if (msg.wParam & EWX_REBOOT) NtShutdownSystem(ShutdownReboot); } } FreeLibrary(hNTDLL);