KiDisplayBlueScreen
VOID __stdcall KiDisplayBlueScreen(UINT64 DisplayBugCheckFlags){
char v1;
__int64 v2;
UINT16 *v3;
UINT64 *v4;
__int64 v5;
char *v6;
INT64 *v7;
unsigned __int16 Length;
char *Buffer;
unsigned __int16 v10;
WCHAR *v11;
PWCHAR v12;
__int64 v13;
WCHAR v14;
unsigned int v15;
INT64 v16;
PWCHAR *v17;
PWCHAR *v18;
INT64 *v19;
__int64 v20;
PWCHAR *v21;
UINT8 v22[8];
NTSTRSAFE_PSTR ppszDestEnd;
STRING ppszDestEnd_8;
__int128 result_8;
unsigned __int16 v26;
unsigned __int16 v27;
PWCHAR String;
INT64 v29;
char v30;
char pszDest[16];
char v32;
char v33;
v1 = DisplayBugCheckFlags;
memset((INT64)&result_8, 0i64);
ppszDestEnd = 0i64;
*(_DWORD *)&v22[4] = KiBugCheckData;
v22[0] = 1;
ppszDestEnd_8 = 0i64;
HeadlessDispatch(0xEui64, 0i64, 0i64, 0i64, 0i64);
HeadlessDispatch(1ui64, v22, 1ui64, 0i64, 0i64);
v2 = 4i64;
HeadlessDispatch(0x14ui64, &v22[4], 4ui64, 0i64, 0i64);
IoSaveBugCheckProgress(0x81ui64);
v3 = KiBugCheckDriver;
v4 = &KiBugCheckData + 1;
if( KiBugCheckDriver || (KiDumpParameterImages(0i64, &KiBugCheckData + 1, 4u, 0), (v3 = KiBugCheckDriver) != 0i64) )
{
if( *v3 == 30 && !memcmp(*((PVOID *)v3 + 1), L"VerifierExt.sys", 0x1Eui64) )
v3 = 0i64;
}
v5 = 4i64;
String = (PWCHAR)&v33;
v6 = &v32;
v27 = 256;
v7 = &v29;
do
{
v7[1] = (INT64)v6;
v6 += 38;
*(_DWORD *)v7 = 2490404;
v7 += 2;
--v5;
}
while( v5 );
if( KeGetBugMessageText((unsigned int)KiBugCheckData, &ppszDestEnd_8) )
{
Buffer = ppszDestEnd_8.Buffer;
Length = ppszDestEnd_8.Length;
}
else
{
RtlStringCbPrintfExA(pszDest, 0xBui64, &ppszDestEnd, 0i64, 0i64, (INT8 *)"0x%08x");
Length = (_WORD)ppszDestEnd - (unsigned __int16)pszDest;
Buffer = pszDest;
}
v10 = 0;
v11 = String;
if( Length >= (unsigned __int16)((v27 >> 1) - 1) )
Length = (v27 >> 1) - 1;
if( Length )
{
v12 = String;
v13 = Length;
v10 = Length;
do
{
v14 = *Buffer++;
*v12++ = v14;
--v13;
}
while( v13 );
}
v26 = 2 * v10;
v11[v10] = 0;
InbvAcquireDisplayOwnership();
IoSaveBugCheckProgress(0x82ui64);
v15 = KiBugCheckData;
result_8 = 0i64;
BgpFwAcquireLock(v16);
if( (dword_140C13310 & 2) != 0 )
{
BgpFwDisplayBugCheckScreen(v15, &KiBugCheckData + 1, v3, &result_8, v1);
v11 = String;
}
BgpFwReleaseLock();
IoSaveBugCheckProgress(0x80ui64);
v17 = (PWCHAR *)result_8;
if( (_QWORD)result_8 && (v18 = (PWCHAR *)*((_QWORD *)&result_8 + 1)) != 0i64 )
{
KiHeadlessDisplayString((PWCHAR)L"\r\n", 6ui64);
KiHeadlessDisplayString(v17[1], *(unsigned __int16 *)v17);
KiHeadlessDisplayString((PWCHAR)L"\r\n", 6ui64);
KiHeadlessDisplayString(v18[1], *(unsigned __int16 *)v18);
}
else
{
v19 = &v29;
v20 = 4i64;
do
{
KiBugCheckConvertParameterValueToUnicodeString(*v4, (INT64)v19);
v19 += 2;
++v4;
--v20;
}
while( v20 );
v11 = String;
}
KiHeadlessDisplayString((PWCHAR)L"\r\n", 6ui64);
KiHeadlessDisplayString(v11, v26);
if( KiBugCheckDriver )
{
KiHeadlessDisplayString((PWCHAR)L"\r\n", 6ui64);
KiHeadlessDisplayString(*((PWCHAR *)KiBugCheckDriver + 1), *KiBugCheckDriver);
}
KiHeadlessDisplayString((PWCHAR)L"\r\n", 6ui64);
KiHeadlessDisplayString((PWCHAR)L"\r\n", 6ui64);
v21 = (PWCHAR *)&v30;
do
{
KiHeadlessDisplayString(*v21, *((unsigned __int16 *)v21 - 4));
KiHeadlessDisplayString((PWCHAR)L"\r\n", 6ui64);
v21 += 2;
--v2;
}
while( v2 );
KiHeadlessDisplayString((PWCHAR)L"\r\n", 6ui64);
}Referenced by:
KeBugCheck2