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;
_KAPC_STATE ApcState;
v7 = 0;
memset(&ApcState, 0, sizeof(ApcState));
if( PsGetServerSiloState(Silo) < SERVERSILO_SHUTTING_DOWN )
{
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 != KeGetCurrentThread()->ApcState.Process )
KeStackAttachProcess(&v12->Pcb, &ApcState);
KeBugCheckEx(0xEFu, Object, (PVOID)(v11 == 6), 0i64, 0i64);
}
if( !v10 )
PsTerminateServerSilo();
return;
}
DbgPrintEx(0, 0, v8, Object, v9);
while( 1 )
{
if( (_BYTE)KdDebuggerNotPresent )
goto LABEL_14;
DbgPrompt((INT64)"Break, or Ignore(bi)? ");
if( Response == 66 )
goto LABEL_11;
if( Response != 73 )
break;
LABEL_12:
v7 = 1;
LABEL_13:
if( v7 )
goto LABEL_14;
}
if( Response != 98 )
{
if( Response != 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