diff --git a/reactos/drivers/ksfilter/ks/property.c b/reactos/drivers/ksfilter/ks/property.c index 960b4997406..7d6a29b704c 100644 --- a/reactos/drivers/ksfilter/ks/property.c +++ b/reactos/drivers/ksfilter/ks/property.c @@ -8,6 +8,9 @@ #include "precomp.h" +/* SEH support with PSEH */ +#include + #define NDEBUG #include @@ -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; } } }