[KS]
authorJohannes Anderwald <johannes.anderwald@reactos.org>
Sat, 22 Feb 2014 09:53:25 +0000 (09:53 +0000)
committerJohannes Anderwald <johannes.anderwald@reactos.org>
Sat, 22 Feb 2014 09:53:25 +0000 (09:53 +0000)
- Call Property handler guarded in seh block
- Needs to be done in portcls too
-

svn path=/trunk/; revision=62285

reactos/drivers/ksfilter/ks/property.c

index 960b499..7d6a29b 100644 (file)
@@ -8,6 +8,9 @@
 
 #include "precomp.h"
 
+/* SEH support with PSEH */
+#include <pseh/pseh2.h>
+
 #define NDEBUG
 #include <debug.h>
 
@@ -280,8 +283,16 @@ KspPropertyHandler(
             KSPROPERTY_ITEM_IRP_STORAGE(Irp) = PropertyItem;
         }
 
-        /* call property handler */
-        Status = PropertyHandler(Irp, Property, (OutputBufferLength > 0 ? Irp->AssociatedIrp.SystemBuffer : NULL));
+        _SEH2_TRY
+        {
+            /* call property handler */
+            Status = PropertyHandler(Irp, Property, (OutputBufferLength > 0 ? Irp->AssociatedIrp.SystemBuffer : NULL));
+        }
+        _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+        {
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
+        }
+        _SEH2_END;
 
         if (Status == STATUS_BUFFER_TOO_SMALL)
         {
@@ -297,9 +308,16 @@ KspPropertyHandler(
                     /* no memory */
                     return STATUS_INSUFFICIENT_RESOURCES;
                 }
-
-                /* re-call property handler */
-                Status = PropertyHandler(Irp, Property, Irp->AssociatedIrp.SystemBuffer);
+                _SEH2_TRY
+                {
+                    /* re-call property handler */
+                    Status = PropertyHandler(Irp, Property, Irp->AssociatedIrp.SystemBuffer);
+                }
+                _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+                {
+                    Status =  _SEH2_GetExceptionCode();
+                }
+                _SEH2_END;
             }
         }
     }