fix exception filters

svn path=/trunk/; revision=30838
This commit is contained in:
Christoph von Wittich 2007-11-28 13:27:42 +00:00
parent 0241a0c838
commit 4497838ce7

View file

@ -215,14 +215,22 @@ UnhandledExceptionFilter(struct _EXCEPTION_POINTERS *ExceptionInfo)
NTSTATUS ErrCode; NTSTATUS ErrCode;
if (ExceptionInfo->ExceptionRecord->ExceptionCode == STATUS_ACCESS_VIOLATION && if (ExceptionInfo->ExceptionRecord->ExceptionCode == STATUS_ACCESS_VIOLATION &&
ExceptionInfo->ExceptionRecord->ExceptionInformation[0]) ExceptionInfo->ExceptionRecord->NumberParameters >= 2)
{ {
/* Change the protection on some write attempts, some InstallShield setups switch(ExceptionInfo->ExceptionRecord->ExceptionInformation[0])
have this bug */ {
RetValue = BasepCheckForReadOnlyResource( case EXCEPTION_WRITE_FAULT:
(PVOID)ExceptionInfo->ExceptionRecord->ExceptionInformation[1]); /* Change the protection on some write attempts, some InstallShield setups
if (RetValue == EXCEPTION_CONTINUE_EXECUTION) have this bug */
return EXCEPTION_CONTINUE_EXECUTION; RetValue = BasepCheckForReadOnlyResource(
(PVOID)ExceptionInfo->ExceptionRecord->ExceptionInformation[1]);
if (RetValue == EXCEPTION_CONTINUE_EXECUTION)
return EXCEPTION_CONTINUE_EXECUTION;
break;
case EXCEPTION_EXECUTE_FAULT:
/* FIXME */
break;
}
} }
/* Is there a debugger running ? */ /* Is there a debugger running ? */
@ -241,6 +249,13 @@ UnhandledExceptionFilter(struct _EXCEPTION_POINTERS *ExceptionInfo)
return EXCEPTION_CONTINUE_SEARCH; return EXCEPTION_CONTINUE_SEARCH;
} }
if (GlobalTopLevelExceptionFilter)
{
LONG ret = GlobalTopLevelExceptionFilter( ExceptionInfo );
if (ret != EXCEPTION_CONTINUE_SEARCH)
return ret;
}
if ((GetErrorMode() & SEM_NOGPFAULTERRORBOX) == 0) if ((GetErrorMode() & SEM_NOGPFAULTERRORBOX) == 0)
{ {
#ifdef _X86_ #ifdef _X86_