mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 21:32:56 +00:00
[KS]
- make a copy of KSFILTER_DESCRIPTOR as it might have been allocated from the stack - always initialize object bag in filter factory svn path=/trunk/; revision=72779
This commit is contained in:
parent
ed87e2056d
commit
2380a6ec54
1 changed files with 18 additions and 10 deletions
|
@ -238,12 +238,20 @@ IKsFilterFactory_fnInitialize(
|
||||||
/* initialize filterfactory */
|
/* initialize filterfactory */
|
||||||
This->SleepCallback = SleepCallback;
|
This->SleepCallback = SleepCallback;
|
||||||
This->WakeCallback = WakeCallback;
|
This->WakeCallback = WakeCallback;
|
||||||
This->FilterFactory.FilterDescriptor = Descriptor;
|
|
||||||
This->Header.KsDevice = &DeviceExtension->DeviceHeader->KsDevice;
|
This->Header.KsDevice = &DeviceExtension->DeviceHeader->KsDevice;
|
||||||
This->Header.Type = KsObjectTypeFilterFactory;
|
This->Header.Type = KsObjectTypeFilterFactory;
|
||||||
This->Header.Parent.KsDevice = &DeviceExtension->DeviceHeader->KsDevice;
|
This->Header.Parent.KsDevice = &DeviceExtension->DeviceHeader->KsDevice;
|
||||||
This->DeviceHeader = DeviceExtension->DeviceHeader;
|
This->DeviceHeader = DeviceExtension->DeviceHeader;
|
||||||
|
|
||||||
|
/* copy descriptor */
|
||||||
|
This->FilterFactory.FilterDescriptor = AllocateItem(NonPagedPool, sizeof(KSFILTER_DESCRIPTOR));
|
||||||
|
if (!This->FilterFactory.FilterDescriptor)
|
||||||
|
{
|
||||||
|
DPRINT("out of memory");
|
||||||
|
return STATUS_INSUFFICIENT_RESOURCES;
|
||||||
|
}
|
||||||
|
RtlMoveMemory(This->FilterFactory.FilterDescriptor, Descriptor, sizeof(KSFILTER_DESCRIPTOR));
|
||||||
|
|
||||||
/* initialize filter factory control mutex */
|
/* initialize filter factory control mutex */
|
||||||
This->Header.ControlMutex = &This->ControlMutex;
|
This->Header.ControlMutex = &This->ControlMutex;
|
||||||
KeInitializeMutex(This->Header.ControlMutex, 0);
|
KeInitializeMutex(This->Header.ControlMutex, 0);
|
||||||
|
@ -313,19 +321,19 @@ IKsFilterFactory_fnInitialize(
|
||||||
RtlFreeUnicodeString(&ReferenceString);
|
RtlFreeUnicodeString(&ReferenceString);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* create a object bag for the filter factory */
|
||||||
|
This->FilterFactory.Bag = AllocateItem(NonPagedPool, sizeof(KSIOBJECT_BAG));
|
||||||
|
if (This->FilterFactory.Bag)
|
||||||
|
{
|
||||||
|
/* initialize object bag */
|
||||||
|
KsDevice = (IKsDevice*)&DeviceExtension->DeviceHeader->BasicHeader.OuterUnknown;
|
||||||
|
KsDevice->lpVtbl->InitializeObjectBag(KsDevice, (PKSIOBJECT_BAG)This->FilterFactory.Bag, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
if (FilterFactory)
|
if (FilterFactory)
|
||||||
{
|
{
|
||||||
/* return filterfactory */
|
/* return filterfactory */
|
||||||
*FilterFactory = &This->FilterFactory;
|
*FilterFactory = &This->FilterFactory;
|
||||||
|
|
||||||
/* create a object bag for the filter factory */
|
|
||||||
This->FilterFactory.Bag = AllocateItem(NonPagedPool, sizeof(KSIOBJECT_BAG));
|
|
||||||
if (This->FilterFactory.Bag)
|
|
||||||
{
|
|
||||||
/* initialize object bag */
|
|
||||||
KsDevice = (IKsDevice*)&DeviceExtension->DeviceHeader->BasicHeader.OuterUnknown;
|
|
||||||
KsDevice->lpVtbl->InitializeObjectBag(KsDevice, (PKSIOBJECT_BAG)This->FilterFactory.Bag, NULL);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* attach filterfactory to device header */
|
/* attach filterfactory to device header */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue