NtRaiseHardError
NTSTATUS __stdcall NtRaiseHardError(
NTSTATUS ErrorStatus,
UINT64 NumberOfParameters,
UINT64 UnicodeStringParameterMask,
PULONG_PTR Parameters,
UINT64 ValidResponseOptions,
PULONG Response,
INT64 a7,
UINT64 *a8){
unsigned int v8;
unsigned int v9;
__int64 v11;
__int64 v12;
unsigned int i;
__int64 v14;
__int64 v15;
__int64 v16;
__int64 v17;
UINT64 v18;
int v19;
UINT64 *TrustedParameters;
UINT64 v22;
UINT64 *v23;
UINT64 *v24;
UINT64 v25;
int v26;
__int64 Src[5];
UINT64 v28[15];
v8 = UnicodeStringParameterMask;
v9 = NumberOfParameters;
LODWORD(v25) = 0;
if( (unsigned int)NumberOfParameters > 5 )
return -1073741584;
if( Parameters )
{
if( (_DWORD)NumberOfParameters )
goto LABEL_6;
return -1073741584;
}
if( (_DWORD)NumberOfParameters )
return -1073741584;
LABEL_6:
if( KeGetCurrentThread()->PreviousMode )
{
if( (unsigned int)ValidResponseOptions > 8 )
return -1073741582;
v11 = (__int64)Response;
if( (unsigned __int64)Response >= 0x7FFFFFFF0000i64 )
v11 = 0x7FFFFFFF0000i64;
*(_DWORD *)v11 = *(_DWORD *)v11;
if( Parameters )
{
v12 = (unsigned int)NumberOfParameters;
if( v12 * 8 )
{
if( ((unsigned __int8)Parameters & 7) != 0 )
ExRaiseDatatypeMisalignment();
if( (unsigned __int64)&Parameters[v12] > 0x7FFFFFFF0000i64 || &Parameters[v12] < Parameters )
MEMORY[0x7FFFFFFF0000] = 0;
}
memmove(Src, Parameters, 8 * NumberOfParameters);
memmove(v28, Src, 8 * v9);
if( v8 )
{
for( i = 0; ; ++i )
{
HIDWORD(v25) = i;
if( i >= v9 )
break;
if( _bittest((const int *)&v8, i) )
{
v14 = i;
v15 = Src[i];
if( (v15 & 7) != 0 )
ExRaiseDatatypeMisalignment();
v16 = 2i64 * i;
*(_OWORD *)&v28[v16 + 5] = *(_OWORD *)v15;
v17 = WORD1(v28[v16 + 5]);
if( (_WORD)v17 )
{
v18 = v28[v16 + 6];
if( v18 + v17 > 0x7FFFFFFF0000i64 || v18 + v17 < v18 )
MEMORY[0x7FFFFFFF0000] = 0;
}
v28[v14] = (UINT64)&v28[v16 + 5];
i = HIDWORD(v25);
}
}
}
}
LODWORD(v22) = ValidResponseOptions;
v19 = ExpRaiseHardError((unsigned int)ErrorStatus, v9, v8, (UINT64 *)Src, v28, v22, &v25);
v26 = v19;
*Response = v25;
}
else
{
LODWORD(TrustedParameters) = ValidResponseOptions;
v19 = ExRaiseHardError(
*(INT64 *)&ErrorStatus,
NumberOfParameters,
UnicodeStringParameterMask,
Parameters,
(UINT64)TrustedParameters,
&v25,
(INT64)v23,
v24);
*Response = v25;
}
return v19;
}Referenced by:
No references.