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