[ros-diffs] [cwittich] 30838: fix exception filters

cwittich at svn.reactos.org cwittich at svn.reactos.org
Wed Nov 28 14:27:43 CET 2007


Author: cwittich
Date: Wed Nov 28 16:27:42 2007
New Revision: 30838

URL: http://svn.reactos.org/svn/reactos?rev=30838&view=rev
Log:
fix exception filters

Modified:
    trunk/reactos/dll/win32/kernel32/except/except.c

Modified: trunk/reactos/dll/win32/kernel32/except/except.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/except/except.c?rev=30838&r1=30837&r2=30838&view=diff
==============================================================================
--- trunk/reactos/dll/win32/kernel32/except/except.c (original)
+++ trunk/reactos/dll/win32/kernel32/except/except.c Wed Nov 28 16:27:42 2007
@@ -215,14 +215,22 @@
    NTSTATUS ErrCode;
 
    if (ExceptionInfo->ExceptionRecord->ExceptionCode == STATUS_ACCESS_VIOLATION &&
-       ExceptionInfo->ExceptionRecord->ExceptionInformation[0])
-   {
-      /* Change the protection on some write attempts, some InstallShield setups
-         have this bug */
-      RetValue = BasepCheckForReadOnlyResource(
-         (PVOID)ExceptionInfo->ExceptionRecord->ExceptionInformation[1]);
-      if (RetValue == EXCEPTION_CONTINUE_EXECUTION)
-         return EXCEPTION_CONTINUE_EXECUTION;
+       ExceptionInfo->ExceptionRecord->NumberParameters >= 2)
+   {
+      switch(ExceptionInfo->ExceptionRecord->ExceptionInformation[0])
+      {
+      case EXCEPTION_WRITE_FAULT:
+         /* Change the protection on some write attempts, some InstallShield setups
+            have this bug */
+         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 ? */
@@ -241,6 +249,13 @@
       return EXCEPTION_CONTINUE_SEARCH;
    }
 
+   if (GlobalTopLevelExceptionFilter)
+   {
+      LONG ret = GlobalTopLevelExceptionFilter( ExceptionInfo );
+      if (ret != EXCEPTION_CONTINUE_SEARCH)
+         return ret;
+   }
+    
    if ((GetErrorMode() & SEM_NOGPFAULTERRORBOX) == 0)
    {
 #ifdef _X86_




More information about the Ros-diffs mailing list