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.
62 lines
1.6 KiB
62 lines
1.6 KiB
/*++
|
|
|
|
Copyright (c) Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
sxsexceptionhandling.cpp
|
|
|
|
Abstract:
|
|
|
|
Author:
|
|
|
|
Jay Krell (a-JayK, JayKrell) October 2000
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
#include "stdinc.h"
|
|
#include <stdio.h>
|
|
|
|
LONG
|
|
SxspExceptionFilter(
|
|
PEXCEPTION_POINTERS ExceptionPointers,
|
|
PCSTR Function
|
|
)
|
|
{
|
|
|
|
// add handling for unhandled status in RtlUnhandledExceptionFilter
|
|
|
|
switch ( ExceptionPointers->ExceptionRecord->ExceptionCode )
|
|
{
|
|
case STATUS_NO_MEMORY:
|
|
case STATUS_INSUFFICIENT_RESOURCES:
|
|
return EXCEPTION_EXECUTE_HANDLER;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
#if defined(FUSION_WIN)
|
|
INT i = ::FusionpRtlUnhandledExceptionFilter(ExceptionPointers);
|
|
if (i == EXCEPTION_CONTINUE_SEARCH)
|
|
{
|
|
i = EXCEPTION_EXECUTE_HANDLER;
|
|
}
|
|
return i;
|
|
#else
|
|
// ISSUE:2002-03-14:jonwis It always seemed to me like you should do snprintf and then
|
|
// stomp in the null termination, rather than the other way around.
|
|
char buf[64];
|
|
buf[RTL_NUMBER_OF(buf) - 1] = 0;
|
|
::_snprintf(buf, RTL_NUMBER_OF(buf) - 1, "** Unhandled exception 0x%x\n", ExceptionPointers->ExceptionRecord->ExceptionCode);
|
|
::OutputDebugStringA(buf);
|
|
#if DBG
|
|
::_snprintf(buf, RTL_NUMBER_OF(buf) - 1, "** .exr %p\n", ExceptionPointers->ExceptionRecord);
|
|
::OutputDebugStringA(buf);
|
|
::_snprintf(buf, RTL_NUMBER_OF(buf) - 1, "** .cxr %p\n", ExceptionPointers->ContextRecord);
|
|
::OutputDebugStringA(buf);
|
|
::DebugBreak();
|
|
#endif
|
|
return EXCEPTION_EXECUTE_HANDLER;
|
|
#endif
|
|
}
|