mirror of
https://github.com/reactos/reactos.git
synced 2024-12-27 09:34:43 +00:00
[NTOS:KE/EX] Add minimal EMS (headless) support for bugcheck.
In particular, the HeadlessGlobals->InBugCheck flag MUST be set prior to displaying the blue-screen, because the HDL global lock function would trigger a (nested) BSoD otherwise. Regarding the unimplemented HeadlessCmdSendBlueScreenData: it sends to the management console an XML description of the bugcheck. An example can be seen in this issue report: https://github.com/cloud-hypervisor/cloud-hypervisor/issues/3168 For more information, please consult: https://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/windowsserver2003emssacxml.doc
This commit is contained in:
parent
b15dcb5cf6
commit
3abb21080d
2 changed files with 24 additions and 2 deletions
|
@ -450,8 +450,15 @@ HdlspDispatch(IN HEADLESS_CMD Command,
|
||||||
|
|
||||||
case HeadlessCmdGetLine:
|
case HeadlessCmdGetLine:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HeadlessCmdStartBugCheck:
|
case HeadlessCmdStartBugCheck:
|
||||||
|
{
|
||||||
|
HeadlessGlobals->InBugCheck = TRUE;
|
||||||
|
HeadlessGlobals->ProcessingCmd = FALSE;
|
||||||
|
Status = STATUS_SUCCESS;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case HeadlessCmdDoBugCheckProcessing:
|
case HeadlessCmdDoBugCheckProcessing:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -518,7 +525,10 @@ HdlspDispatch(IN HEADLESS_CMD Command,
|
||||||
}
|
}
|
||||||
|
|
||||||
case HeadlessCmdSendBlueScreenData:
|
case HeadlessCmdSendBlueScreenData:
|
||||||
|
// TODO: Send XML description of bugcheck.
|
||||||
|
// InputBuffer points to the BugCheckCode.
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HeadlessCmdQueryGUID:
|
case HeadlessCmdQueryGUID:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -615,8 +615,20 @@ KiDisplayBlueScreen(IN ULONG MessageId,
|
||||||
IN PCHAR HardErrMessage OPTIONAL,
|
IN PCHAR HardErrMessage OPTIONAL,
|
||||||
IN PCHAR Message)
|
IN PCHAR Message)
|
||||||
{
|
{
|
||||||
|
ULONG BugCheckCode = (ULONG)KiBugCheckData[0];
|
||||||
|
BOOLEAN Enable = TRUE;
|
||||||
CHAR AnsiName[107];
|
CHAR AnsiName[107];
|
||||||
|
|
||||||
|
/* Enable headless support for bugcheck */
|
||||||
|
HeadlessDispatch(HeadlessCmdStartBugCheck,
|
||||||
|
NULL, 0, NULL, NULL);
|
||||||
|
HeadlessDispatch(HeadlessCmdEnableTerminal,
|
||||||
|
&Enable, sizeof(Enable),
|
||||||
|
NULL, NULL);
|
||||||
|
HeadlessDispatch(HeadlessCmdSendBlueScreenData,
|
||||||
|
&BugCheckCode, sizeof(BugCheckCode),
|
||||||
|
NULL, NULL);
|
||||||
|
|
||||||
/* Check if bootvid is installed */
|
/* Check if bootvid is installed */
|
||||||
if (InbvIsBootDriverInstalled())
|
if (InbvIsBootDriverInstalled())
|
||||||
{
|
{
|
||||||
|
@ -664,7 +676,7 @@ KiDisplayBlueScreen(IN ULONG MessageId,
|
||||||
if (MessageId == BUGCODE_PSS_MESSAGE)
|
if (MessageId == BUGCODE_PSS_MESSAGE)
|
||||||
{
|
{
|
||||||
/* It is, so get the bug code string as well */
|
/* It is, so get the bug code string as well */
|
||||||
KeGetBugMessageText((ULONG)KiBugCheckData[0], NULL);
|
KeGetBugMessageText(BugCheckCode, NULL);
|
||||||
InbvDisplayString("\r\n\r\n");
|
InbvDisplayString("\r\n\r\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -683,7 +695,7 @@ KiDisplayBlueScreen(IN ULONG MessageId,
|
||||||
RtlStringCbPrintfA(AnsiName,
|
RtlStringCbPrintfA(AnsiName,
|
||||||
sizeof(AnsiName),
|
sizeof(AnsiName),
|
||||||
"\r\n\r\n*** STOP: 0x%08lX (0x%p,0x%p,0x%p,0x%p)\r\n\r\n",
|
"\r\n\r\n*** STOP: 0x%08lX (0x%p,0x%p,0x%p,0x%p)\r\n\r\n",
|
||||||
(ULONG)KiBugCheckData[0],
|
BugCheckCode,
|
||||||
(PVOID)KiBugCheckData[1],
|
(PVOID)KiBugCheckData[1],
|
||||||
(PVOID)KiBugCheckData[2],
|
(PVOID)KiBugCheckData[2],
|
||||||
(PVOID)KiBugCheckData[3],
|
(PVOID)KiBugCheckData[3],
|
||||||
|
|
Loading…
Reference in a new issue