105 lines
1.8 KiB
C
105 lines
1.8 KiB
C
/*++
|
||
|
||
Copyright (c) 1989 Microsoft Corporation
|
||
|
||
Module Name:
|
||
|
||
RxAssert.c
|
||
|
||
Abstract:
|
||
|
||
This module implements the normal assert routine so that it can be used even on a debug build.
|
||
|
||
Author:
|
||
|
||
Revision History:
|
||
|
||
--*/
|
||
|
||
#include "precomp.h"
|
||
#pragma hdrstop
|
||
|
||
// i just got the stuff that i need from ntrtl.h because not it doesn't
|
||
// protect against multiple include
|
||
|
||
#if DBG
|
||
ULONG RxContinueFromAssert = 1;
|
||
#else
|
||
ULONG RxContinueFromAssert = 0;
|
||
#endif //DBG
|
||
|
||
VOID
|
||
RxDbgBreakPoint(
|
||
ULONG LineNumber)
|
||
{
|
||
DbgBreakPoint();
|
||
}
|
||
|
||
ULONG
|
||
NTAPI
|
||
DbgPrompt(
|
||
PCH Prompt,
|
||
PCH Response,
|
||
ULONG MaximumResponseLength
|
||
);
|
||
|
||
//#if DBG
|
||
|
||
VOID
|
||
RxAssert(
|
||
IN PVOID FailedAssertion,
|
||
IN PVOID FileName,
|
||
IN ULONG LineNumber,
|
||
IN PCHAR Message OPTIONAL
|
||
)
|
||
{
|
||
char Response[ 2 ];
|
||
CONTEXT Context;
|
||
|
||
|
||
#ifndef BLDR_KERNEL_RUNTIME
|
||
/// RtlCaptureContext( &Context );
|
||
#endif
|
||
|
||
if (!RxContinueFromAssert) {
|
||
|
||
//
|
||
// we're outta here
|
||
KeBugCheckEx (RDBSS_FILE_SYSTEM,
|
||
0xa55a0000|LineNumber,
|
||
0,0,0);
|
||
}
|
||
|
||
while (TRUE) {
|
||
DbgPrint(
|
||
"\n*** Assertion failed: %s%s\n*** Source File: %s, line %ld\n\n",
|
||
Message ? Message : "",
|
||
FailedAssertion,
|
||
FileName ? FileName : "",
|
||
LineNumber
|
||
);
|
||
|
||
DbgPrompt( "Break, Ignore (bi)? ",
|
||
Response,
|
||
sizeof( Response )
|
||
);
|
||
|
||
switch (Response[0]) {
|
||
case 'B':
|
||
case 'b':
|
||
|
||
DbgPrint( "Execute '!cxr %lx' to dump context\n", &Context);
|
||
DbgBreakPoint();
|
||
break;
|
||
|
||
case 'I':
|
||
case 'i':
|
||
return;
|
||
|
||
}
|
||
}
|
||
|
||
DbgBreakPoint();
|
||
}
|
||
//#endif //if DBG
|
||
|