USBAudioCreateFilterContext(
PKSDEVICE Device)
{
- KSFILTER_DESCRIPTOR FilterDescriptor;
+ PKSFILTER_DESCRIPTOR FilterDescriptor;
PKSCOMPONENTID ComponentId;
NTSTATUS Status;
- /* clear filter descriptor */
- RtlZeroMemory(&FilterDescriptor, sizeof(KSFILTER_DESCRIPTOR));
+ /* allocate descriptor */
+ FilterDescriptor = AllocFunction(sizeof(KSFILTER_DESCRIPTOR));
+ if (!FilterDescriptor)
+ {
+ /* no memory */
+ return USBD_STATUS_INSUFFICIENT_RESOURCES;
+ }
/* init filter descriptor*/
- FilterDescriptor.Version = KSFILTER_DESCRIPTOR_VERSION;
- FilterDescriptor.Flags = 0;
- FilterDescriptor.ReferenceGuid = &KSNAME_Filter;
- FilterDescriptor.Dispatch = &USBAudioFilterDispatch;
- FilterDescriptor.CategoriesCount = 1;
- FilterDescriptor.Categories = &GUID_KSCATEGORY_AUDIO;
+ FilterDescriptor->Version = KSFILTER_DESCRIPTOR_VERSION;
+ FilterDescriptor->Flags = 0;
+ FilterDescriptor->ReferenceGuid = &KSNAME_Filter;
+ FilterDescriptor->Dispatch = &USBAudioFilterDispatch;
+ FilterDescriptor->CategoriesCount = 1;
+ FilterDescriptor->Categories = &GUID_KSCATEGORY_AUDIO;
/* init component id*/
ComponentId = AllocFunction(sizeof(KSCOMPONENTID));
//FreeFunction(ComponentId);
//return Status;
}
- FilterDescriptor.ComponentId = ComponentId;
+ FilterDescriptor->ComponentId = ComponentId;
/* build pin descriptors */
- Status = USBAudioPinBuildDescriptors(Device, (PKSPIN_DESCRIPTOR_EX *)&FilterDescriptor.PinDescriptors, &FilterDescriptor.PinDescriptorsCount, &FilterDescriptor.PinDescriptorSize);
+ Status = USBAudioPinBuildDescriptors(Device, (PKSPIN_DESCRIPTOR_EX *)&FilterDescriptor->PinDescriptors, &FilterDescriptor->PinDescriptorsCount, &FilterDescriptor->PinDescriptorSize);
if (!NT_SUCCESS(Status))
{
/* failed*/
}
/* lets create the filter */
- Status = KsCreateFilterFactory(Device->FunctionalDeviceObject, &FilterDescriptor, ReferenceString, NULL, KSCREATE_ITEM_FREEONSTOP, NULL, NULL, NULL);
+ Status = KsCreateFilterFactory(Device->FunctionalDeviceObject, FilterDescriptor, ReferenceString, NULL, KSCREATE_ITEM_FREEONSTOP, NULL, NULL, NULL);
DPRINT1("KsCreateFilterFactory: %x\n", Status);
return Status;