Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#include <ntosp.h>
extern KEVENT CrashEvent; extern ULONG CrashRequest;
unsigned int fExcept1 = 0; unsigned int cTry1 = 0; unsigned int cRaise1pre = 0; unsigned int cRaise1post = 0; unsigned int cExcept1 = 0; unsigned int cFilter1 = 0;
unsigned int fExcept2 = 0; unsigned int cTry2 = 0; unsigned int cRaise2pre = 0; unsigned int cRaise2post = 0; unsigned int cFinally2 = 0;
unsigned int fExcept3 = 0; unsigned int cTry3 = 0; unsigned int cRaise3pre = 0; unsigned int cRaise3post = 0; unsigned int cExcept3 = 0; unsigned int cFilter3 = 0;
unsigned int fExcept4 = 0; unsigned int cTry4 = 0; unsigned int cRaise4pre = 0; unsigned int cRaise4post = 0; unsigned int cFinally4 = 0;
unsigned int fExcept5 = 0; unsigned int cTry5 = 0; unsigned int cRaise5pre = 0; unsigned int cRaise5post = 0; unsigned int cExcept5 = 0; unsigned int cFilter5 = 0;
unsigned long GlobalVar = 0;
int ExceptFilterFn5 (int ExceptCode) { DbgPrint( "CrashDrv exception filter\n" ); cFilter5 ++; return ExceptCode == 0x00003344 ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_EXECUTION ; }
void function5 () { _try { cTry5 ++; if (fExcept5) { cRaise5pre ++; ExRaiseStatus( fExcept4 ); cRaise5post ++; } } _except (ExceptFilterFn5 (GetExceptionCode ())) { cExcept5 ++; } }
void function4 () { _try { cTry4 ++; function5 (); if (fExcept4) { cRaise4pre ++; ExRaiseStatus( fExcept4 ); cRaise4post ++; } } _finally { cFinally4 ++; } }
int ExceptFilterFn3 (int ExceptCode) { cFilter3 ++; return ExceptCode == 0x00005678 ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH ; }
void function3 () { _try { cTry3 ++; function4 (); if (fExcept3) { cRaise3pre ++; ExRaiseStatus( fExcept3 ); cRaise3post ++; } } _except (ExceptFilterFn3 (GetExceptionCode ())) { cExcept3 ++; } }
void function2 () { _try { cTry2 ++; function3 (); if (fExcept2) { cRaise2pre ++; ExRaiseStatus( fExcept2 ); cRaise2post ++; } } _finally { cFinally2 ++; } }
int ExceptFilterMain (int ExceptCode) { cFilter1 ++; return ExceptCode == 0x00001010 ? EXCEPTION_EXECUTE_HANDLER : ExceptCode == 0x00005678 ? EXCEPTION_CONTINUE_EXECUTION : EXCEPTION_CONTINUE_SEARCH ; }
VOID CrashDrvExceptionTest( PULONG ub ) { int i = 0;
while ( i++ < 10 ) { _try { cTry1 ++; function2 (); if (fExcept1) { cRaise1pre ++; ExRaiseStatus( fExcept1 ); cRaise1post ++; } } _except (ExceptFilterMain (GetExceptionCode ())) { cExcept1 ++; } fExcept1 = 0; fExcept2 = 0; fExcept3 = 0; fExcept4 = 0; fExcept5 = 0; } }
VOID CrashDrvSimpleTest( PULONG ub ) { int i = 0; int j = 0; int k = 0; GlobalVar = 69; i = 1; j = 2; k = 3; }
#pragma warning(disable:4717) // disable recursion check
VOID CrashDrvStackOverFlow( PULONG ub ) { struct { int a; int b; int c; int d; int e; int f; int g; int h; int i; } Foo;
RtlFillMemory (&Foo, 'a', sizeof (Foo));
CrashDrvStackOverFlow ((PVOID) &Foo);
return; }
VOID CrashDrvBugCheck( PULONG ub ) { KeBugCheck( 0x69696969 ); }
VOID CrashDrvHardError( PULONG ub ) { NTSTATUS Status; NTSTATUS ErrorCode; ULONG Response;
ErrorCode = STATUS_SYSTEM_PROCESS_TERMINATED;
Status = ExRaiseHardError( ErrorCode, 0, 0, NULL, OptionShutdownSystem, &Response );
return; }
ULONG CurrentWatchPoint=0;
VOID AsyncSetBreakPoint( ULONG LinearAddress ) { #ifdef i386
CurrentWatchPoint = LinearAddress;
_asm { mov eax, LinearAddress mov dr0, eax mov eax, 10303h mov dr7, eax } #endif
}
VOID AsyncRemoveBreakPoint( ULONG LinearAddress ) { #ifdef i386
CurrentWatchPoint = 0;
_asm { mov eax, 0 mov dr7, eax } #endif
}
#pragma optimize ( "", on )
VOID CrashSpecial( PULONG ub ) { CrashRequest = ub[0]; KeSetEvent( &CrashEvent, 0, FALSE ); }
|