00042 {
00043
#if DBG || RTL_ASSERT_ALWAYS_ENABLED
00044
char Response[ 2 ];
00045 CONTEXT Context;
00046
00047
#ifndef BLDR_KERNEL_RUNTIME
00048
RtlCaptureContext( &Context );
00049
#endif
00050
00051
while (
TRUE) {
00052
DbgPrint(
"\n*** Assertion failed: %s%s\n*** Source File: %s, line %ld\n\n",
00053 Message ? Message :
"",
00054 FailedAssertion,
00055 FileName,
00056 LineNumber
00057 );
00058
00059
DbgPrompt(
"Break, Ignore, Terminate Process or Terminate Thread (bipt)? ",
00060 Response,
00061
sizeof( Response )
00062 );
00063
switch (Response[0]) {
00064
case 'B':
00065
case 'b':
00066
DbgPrint(
"Execute '!cxr %p' to dump context\n", &Context);
00067 DbgBreakPoint();
00068
break;
00069
00070
case 'I':
00071
case 'i':
00072
return;
00073
00074
case 'P':
00075
case 'p':
00076 ZwTerminateProcess( NtCurrentProcess(), STATUS_UNSUCCESSFUL );
00077
break;
00078
00079
case 'T':
00080
case 't':
00081 ZwTerminateThread( NtCurrentThread(), STATUS_UNSUCCESSFUL );
00082
break;
00083 }
00084 }
00085
00086 DbgBreakPoint();
00087 ZwTerminateProcess( NtCurrentProcess(), STATUS_UNSUCCESSFUL );
00088
#endif
00089
}