From cd63ffe6c2fd5bb436cc39be58ba036f9358e631 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Sat, 23 Oct 2010 12:00:11 +0000 Subject: [PATCH] [KS] - Fix property set support handler for topology nodes - Check if the driver supports a basic support handler. In that case return the basic support handler svn path=/trunk/; revision=49237 --- reactos/drivers/ksfilter/ks/property.c | 42 ++++++++++++++++++-------- 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/reactos/drivers/ksfilter/ks/property.c b/reactos/drivers/ksfilter/ks/property.c index b1a17e3ed09..b7f93fe2ac7 100644 --- a/reactos/drivers/ksfilter/ks/property.c +++ b/reactos/drivers/ksfilter/ks/property.c @@ -47,6 +47,25 @@ FindPropertyHandler( IoStatus->Information = PropertySet[Index].PropertyItem[ItemIndex].MinData; return STATUS_MORE_ENTRIES; } + + /* store property set */ + *Set = (PKSPROPERTY_SET)&PropertySet[Index]; + + if (Property->Flags & KSPROPERTY_TYPE_SET) + { + /* store property handler */ + *PropertyHandler = PropertySet[Index].PropertyItem[ItemIndex].SetPropertyHandler; + return STATUS_SUCCESS; + } + + if (Property->Flags & KSPROPERTY_TYPE_GET) + { + /* store property handler */ + *PropertyHandler = PropertySet[Index].PropertyItem[ItemIndex].GetPropertyHandler; + return STATUS_SUCCESS; + } + + if (Property->Flags & KSPROPERTY_TYPE_BASICSUPPORT) { PULONG Flags; @@ -64,14 +83,21 @@ FindPropertyHandler( /* clear flags */ *Flags = 0; + IoStatus->Information = sizeof(ULONG); + + if (PropertySet[Index].PropertyItem[ItemIndex].SupportHandler) + { + /* use support handler from driver */ + *PropertyHandler = PropertySet[Index].PropertyItem[ItemIndex].SupportHandler; + return STATUS_SUCCESS; + } + if (PropertySet[Index].PropertyItem[ItemIndex].GetSupported) *Flags |= KSPROPERTY_TYPE_GET; if (PropertySet[Index].PropertyItem[ItemIndex].SetSupported) *Flags |= KSPROPERTY_TYPE_SET; - IoStatus->Information = sizeof(ULONG); - if (OutputBufferLength >= sizeof(KSPROPERTY_DESCRIPTION)) { /* get output buffer */ @@ -89,14 +115,6 @@ FindPropertyHandler( } return STATUS_SUCCESS; } - if (Property->Flags & KSPROPERTY_TYPE_SET) - *PropertyHandler = PropertySet[Index].PropertyItem[ItemIndex].SetPropertyHandler; - - if (Property->Flags & KSPROPERTY_TYPE_GET) - *PropertyHandler = PropertySet[Index].PropertyItem[ItemIndex].GetPropertyHandler; - - *Set = (PKSPROPERTY_SET)&PropertySet[Index]; - return STATUS_SUCCESS; } } } @@ -171,7 +189,7 @@ KspPropertyHandler( } } } - else if (IsEqualGUIDAligned(&Property->Set, &GUID_NULL) && Property->Id == 0 && Property->Flags == KSPROPERTY_TYPE_SETSUPPORT) + else if (IsEqualGUIDAligned(&Property->Set, &GUID_NULL) && Property->Id == 0 && (Property->Flags & KSPROPERTY_TYPE_SETSUPPORT) == KSPROPERTY_TYPE_SETSUPPORT) { // store output size Irp->IoStatus.Information = sizeof(GUID) * PropertySetsCount; @@ -189,7 +207,7 @@ KspPropertyHandler( { RtlMoveMemory(&Guid[Index], PropertySet[Index].Set, sizeof(GUID)); } - return STATUS_SUCCESS; + Status = STATUS_SUCCESS; } /* done */