PspCatchCriticalBreak
VOID __stdcall PspCatchCriticalBreak(INT8 *Msg, PVOID Object, UINT8 *ImageFileName, _EJOB *Silo, INT64 ExitStatus){
char v7;
const CHAR *v8;
__int64 v9;
char v10;
char v11;
_EPROCESS *v12;
CHAR Response[2];
struct _KAPC_STATE ApcState;
v7 = 0;
memset(&ApcState, 0, sizeof(ApcState));
if( (int)PsGetServerSiloState((INT64)Silo) < 2 )
{
v10 = 0;
if( !(_BYTE)KdDebuggerEnabled )
{
LABEL_15:
v11 = *(_BYTE *)Object & 0x7F;
if( v11 == 6 )
v12 = (_EPROCESS *)*((_QWORD *)Object + 68);
else
v12 = (_EPROCESS *)Object;
if( PsIsHostSilo(Silo) )
{
if( v12 != *((_EPROCESS **)KeGetCurrentThread() + 23) )
KeStackAttachProcess((PRKPROCESS)v12, &ApcState);
KeBugCheckEx(0xEFu, (ULONG_PTR)Object, v11 == 6, 0i64, 0i64);
}
if( !v10 )
PsTerminateServerSilo(Silo, (unsigned int)ExitStatus);
return;
}
DbgPrintEx(0, 0, v8, Object, v9);
while( 1 )
{
if( (_BYTE)KdDebuggerNotPresent )
goto LABEL_14;
DbgPrompt((PSTR)"Break, or Ignore(bi)? ", Response, 2ui64);
if( Response[0] == 66 )
goto LABEL_11;
if( Response[0] != 73 )
break;
LABEL_12:
v7 = 1;
LABEL_13:
if( v7 )
goto LABEL_14;
}
if( Response[0] != 98 )
{
if( Response[0] != 105 )
goto LABEL_13;
goto LABEL_12;
}
LABEL_11:
__debugbreak();
goto LABEL_12;
}
v10 = 1;
v7 = 1;
LABEL_14:
if( !v7 )
goto LABEL_15;
}Referenced by:
PspExitThread
PspTerminateAllThreads
PspTerminateThreadByPointer