HeadlessInfo = OutputBuffer;
HeadlessInfo->PortType = HeadlessSerialPort;
HeadlessInfo->Serial.TerminalAttached = TRUE;
- HeadlessInfo->Serial.UsedBiosSettings = HeadlessGlobals->UsedBiosSettings;
+ HeadlessInfo->Serial.UsedBiosSettings = HeadlessGlobals->UsedBiosSettings != 0;
HeadlessInfo->Serial.TerminalBaudRate = HeadlessGlobals->TerminalBaudRate;
HeadlessInfo->Serial.TerminalType = HeadlessGlobals->TerminalType;
return Status;
}
- /* Set the Start Addresses */
- Thread->StartAddress = (PVOID)KeGetContextPc(ThreadContext);
- Thread->Win32StartAddress = (PVOID)KeGetContextReturnRegister(ThreadContext);
+ /* Set the Start Addresses from the untrusted ThreadContext */
+ _SEH2_TRY
+ {
+ Thread->StartAddress = (PVOID)KeGetContextPc(ThreadContext);
+ Thread->Win32StartAddress = (PVOID)KeGetContextReturnRegister(ThreadContext);
+ }
+ _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+ {
+ Status = _SEH2_GetExceptionCode();
+ }
+ _SEH2_END;
/* Let the kernel intialize the Thread */
- Status = KeInitThread(&Thread->Tcb,
- NULL,
- PspUserThreadStartup,
- NULL,
- Thread->StartAddress,
- ThreadContext,
- TebBase,
- &Process->Pcb);
+ if (NT_SUCCESS(Status))
+ {
+ Status = KeInitThread(&Thread->Tcb,
+ NULL,
+ PspUserThreadStartup,
+ NULL,
+ Thread->StartAddress,
+ ThreadContext,
+ TebBase,
+ &Process->Pcb);
+ }
}
else
{