mirror of
https://github.com/reactos/reactos.git
synced 2025-07-08 03:57:54 +00:00
- Filter dispatch is optional, handle it when creating new filters
svn path=/trunk/; revision=42622
This commit is contained in:
parent
15900e1f91
commit
555a242381
1 changed files with 27 additions and 12 deletions
|
@ -443,6 +443,13 @@ IKsFilter_DispatchClose(
|
||||||
/* free object header */
|
/* free object header */
|
||||||
KsFreeObjectHeader(This->ObjectHeader);
|
KsFreeObjectHeader(This->ObjectHeader);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* complete and forget */
|
||||||
|
Irp->IoStatus.Status = Status;
|
||||||
|
/* complete irp */
|
||||||
|
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||||||
|
}
|
||||||
|
|
||||||
/* done */
|
/* done */
|
||||||
return Status;
|
return Status;
|
||||||
|
@ -1085,21 +1092,29 @@ KspCreateFilter(
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* now let driver initialize the filter instance */
|
/* does the filter have a filter dispatch */
|
||||||
Status = Factory->FilterDescriptor->Dispatch->Create(&This->Filter, Irp);
|
if (Factory->FilterDescriptor->Dispatch)
|
||||||
|
|
||||||
if (!NT_SUCCESS(Status) && Status != STATUS_PENDING)
|
|
||||||
{
|
{
|
||||||
/* driver failed to initialize */
|
/* does it have a create routine */
|
||||||
DPRINT1("Driver: Status %x\n", Status);
|
if (Factory->FilterDescriptor->Dispatch->Create)
|
||||||
|
{
|
||||||
|
/* now let driver initialize the filter instance */
|
||||||
|
Status = Factory->FilterDescriptor->Dispatch->Create(&This->Filter, Irp);
|
||||||
|
|
||||||
/* remove filter instance from filter factory */
|
if (!NT_SUCCESS(Status) && Status != STATUS_PENDING)
|
||||||
iface->lpVtbl->RemoveFilterInstance(iface, (IKsFilter*)&This->lpVtbl);
|
{
|
||||||
|
/* driver failed to initialize */
|
||||||
|
DPRINT1("Driver: Status %x\n", Status);
|
||||||
|
|
||||||
/* free filter instance */
|
/* remove filter instance from filter factory */
|
||||||
FreeItem(This);
|
iface->lpVtbl->RemoveFilterInstance(iface, (IKsFilter*)&This->lpVtbl);
|
||||||
FreeItem(CreateItem);
|
|
||||||
return Status;
|
/* free filter instance */
|
||||||
|
FreeItem(This);
|
||||||
|
FreeItem(CreateItem);
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* now allocate the object header */
|
/* now allocate the object header */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue