ExpRaiseHardError

INT64 __stdcall ExpRaiseHardError(
        INT64 ErrorStatus,
        UINT64 NumberOfParameters,
        UINT64 UnicodeStringParameterMask,
        UINT64 *Parameters,
        UINT64 *TrustedParameters,
        UINT64 ValidResponseOptions,
        UINT64 *Response){
  unsigned int v7; 
  unsigned int v8; 
  __int64 *CurrentServerSiloGlobals; 
  INT8 v10; 
  unsigned int v11; 
  char v13; 
  __int64 v14; 
  int v15; 
  struct _DMA_ADAPTER *v16; 
  char v17; 
  struct _DMA_ADAPTER *v18; 
  _ETHREAD *CurrentThread; 
  __int64 v20; 
  bool v21; 
  int v22; 
  int v23; 
  int v24; 
  unsigned int UnicodeStringParameterMaska; 
  int v26; 
  INT64 v28; 
  __m256i v29; 
  unsigned int v30; 
  __int64 v31; 
  int v32; 
  unsigned int v33; 
  int v34; 
  int v35; 
  char dst[616]; 
  UnicodeStringParameterMaska = UnicodeStringParameterMask;
  v7 = NumberOfParameters;
  v8 = ErrorStatus;
  v26 = NumberOfParameters;
  CurrentServerSiloGlobals = PsGetCurrentServerSiloGlobals();
  v10 = *((_BYTE *)KeGetCurrentThread() + 562);
  v11 = 0;
  *(_DWORD *)Response = 0;
  if( v7 > 0x4D )
    return 3221225485i64;
  v13 = 0;
  if( (_DWORD)ValidResponseOptions == 6 )
  {
    if( !SeSinglePrivilegeCheck(*(_QWORD *)&SeShutdownPrivilege, v10) )
      return 3221225569i64;
    if( !PsIsCurrentThreadInServerSilo() )
      ExReadyForErrors = 0;
    *((_DWORD *)CurrentServerSiloGlobals + 224) = 2;
    v13 = 1;
  }
  v14 = *((_QWORD *)KeGetCurrentThread() + 23);
  v15 = *((_DWORD *)KeGetCurrentThread() + 324) & 0x10;
  if( !v15 && (v8 & 0xC0000000) == -1073741824 && (!*((_DWORD *)CurrentServerSiloGlobals + 224) || v13) )
  {
    ExpSystemErrorHandler(v8, v7, UnicodeStringParameterMaska, TrustedParameters, v10 != 0);
    return 0i64;
  }
  if( v14 == CurrentServerSiloGlobals[110] )
  {
    if( (v8 & 0xC0000000) == -1073741824 )
      ExpSystemErrorHandler(v8, v7, UnicodeStringParameterMaska, TrustedParameters, v10 != 0);
LABEL_37:
    *(_DWORD *)Response = 0;
    return 0i64;
  }
  v16 = 0i64;
  v17 = 0;
  if( !v15 && ((*(_BYTE *)(v14 + 1528) & 1) != 0 || (v8 & 0x10000000) != 0) )
  {
    LODWORD(v18) = PsCaptureExceptionPort((_EPROCESS *)v14);
    v16 = v18;
    if( v18 )
      v17 = 1;
    else
      v16 = (struct _DMA_ADAPTER *)CurrentServerSiloGlobals[111];
  }
  if( v16
    && ((CurrentThread = (_ETHREAD *)KeGetCurrentThread(), (*((_DWORD *)CurrentThread + 29) & 0x400) != 0)
     || *((_BYTE *)CurrentThread + 586) == 1 ? (v20 = 0i64) : (v20 = *((_QWORD *)CurrentThread + 30)),
        v20) )
  {
    v21 = (*(_BYTE *)(v20 + 5808) & 0x10) == 0;
    v22 = 0;
    if( !v21 )
      v22 = -1073741823;
    v23 = UnicodeStringParameterMaska;
    if( v22 < 0 )
    {
      if( v17 == 1 )
        HalPutDmaAdapter(v16);
      v16 = 0i64;
    }
  }
  else
  {
    v23 = UnicodeStringParameterMaska;
  }
  if( !v16 )
    goto LABEL_37;
  v29.m256i_i64[0] = 0x900700048i64;
  v30 = v8 & 0xEFFFFFFF;
  v32 = ValidResponseOptions;
  v35 = v23;
  v34 = v26;
  if( Parameters )
    memmove((UINT8 *)dst, (UINT8 *)Parameters, 8i64 * v7);
  v31 = *(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart;
  v28 = 688i64;
  v24 = LpcSendWaitReceivePort((INT64)v16, 0x20000i64, &v29, (UINT64)&v29, &v28, 0i64);
  if( v17 == 1 )
    HalPutDmaAdapter(v16);
  if( v24 >= 0 )
  {
    if( v33 <= 0xA )
      v11 = v33;
    *(_DWORD *)Response = v11;
  }
  return(unsigned int)v24;
}

Referenced by:

ExRaiseHardError
NtRaiseHardError