mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 09:23:06 +00:00
- Implement KsAddEvent, KsDefaultAddEventHandler, KsPinAttachAndGate, KsPinAttachOrGate, KsPinGetAndGate
svn path=/trunk/; revision=42296
This commit is contained in:
parent
3aba36805e
commit
9042c879ed
5 changed files with 73 additions and 21 deletions
|
@ -138,7 +138,7 @@ KsGenerateEventList(
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@unimplemented
|
@implemented
|
||||||
*/
|
*/
|
||||||
KSDDKAPI
|
KSDDKAPI
|
||||||
VOID
|
VOID
|
||||||
|
@ -147,7 +147,9 @@ KsAddEvent(
|
||||||
IN PVOID Object,
|
IN PVOID Object,
|
||||||
IN PKSEVENT_ENTRY EventEntry)
|
IN PKSEVENT_ENTRY EventEntry)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED
|
PKSBASIC_HEADER Header = (PKSBASIC_HEADER)((ULONG_PTR)Object - sizeof(KSBASIC_HEADER));
|
||||||
|
|
||||||
|
ExInterlockedInsertTailList(&Header->EventList, &EventEntry->ListEntry, &Header->EventListLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -160,10 +162,31 @@ KsDefaultAddEventHandler(
|
||||||
IN PKSEVENTDATA EventData,
|
IN PKSEVENTDATA EventData,
|
||||||
IN OUT PKSEVENT_ENTRY EventEntry)
|
IN OUT PKSEVENT_ENTRY EventEntry)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED
|
PIO_STACK_LOCATION IoStack;
|
||||||
return STATUS_NOT_IMPLEMENTED;
|
PKSIOBJECT_HEADER ObjectHeader;
|
||||||
|
PKSBASIC_HEADER Header;
|
||||||
|
|
||||||
|
/* first get the io stack location */
|
||||||
|
IoStack = IoGetCurrentIrpStackLocation(Irp);
|
||||||
|
|
||||||
|
/* now get the object header */
|
||||||
|
ObjectHeader =(PKSIOBJECT_HEADER)IoStack->FileObject->FsContext;
|
||||||
|
|
||||||
|
/* sanity check */
|
||||||
|
ASSERT(ObjectHeader->ObjectType);
|
||||||
|
|
||||||
|
/* obtain basic header */
|
||||||
|
Header = (PKSBASIC_HEADER)((ULONG_PTR)ObjectHeader->ObjectType - sizeof(KSBASIC_HEADER));
|
||||||
|
|
||||||
|
/* now insert the event entry */
|
||||||
|
ExInterlockedInsertTailList(&Header->EventList, &EventEntry->ListEntry, &Header->EventListLock);
|
||||||
|
|
||||||
|
/* done */
|
||||||
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@unimplemented
|
@unimplemented
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1060,6 +1060,10 @@ KspCreateFilter(
|
||||||
This->Header.Parent.KsFilterFactory = iface->lpVtbl->GetStruct(iface);
|
This->Header.Parent.KsFilterFactory = iface->lpVtbl->GetStruct(iface);
|
||||||
This->Header.Type = KsObjectTypeFilter;
|
This->Header.Type = KsObjectTypeFilter;
|
||||||
KeInitializeMutex(&This->Header.ControlMutex, 0);
|
KeInitializeMutex(&This->Header.ControlMutex, 0);
|
||||||
|
InitializeListHead(&This->Header.EventList);
|
||||||
|
KeInitializeSpinLock(&This->Header.EventListLock);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -189,6 +189,12 @@ IKsFilterFactory_fnInitialize(
|
||||||
This->Header.Parent.KsDevice = &DeviceExtension->DeviceHeader->KsDevice;
|
This->Header.Parent.KsDevice = &DeviceExtension->DeviceHeader->KsDevice;
|
||||||
This->DeviceHeader = DeviceExtension->DeviceHeader;
|
This->DeviceHeader = DeviceExtension->DeviceHeader;
|
||||||
|
|
||||||
|
/* unused fields */
|
||||||
|
KeInitializeMutex(&This->Header.ControlMutex, 0);
|
||||||
|
InitializeListHead(&This->Header.EventList);
|
||||||
|
KeInitializeSpinLock(&This->Header.EventListLock);
|
||||||
|
|
||||||
|
|
||||||
InitializeListHead(&This->SymbolicLinkList);
|
InitializeListHead(&This->SymbolicLinkList);
|
||||||
InitializeListHead(&This->FilterInstanceList);
|
InitializeListHead(&This->FilterInstanceList);
|
||||||
|
|
||||||
|
|
|
@ -60,6 +60,9 @@ typedef struct
|
||||||
KSOBJECTTYPE Type;
|
KSOBJECTTYPE Type;
|
||||||
PKSDEVICE KsDevice;
|
PKSDEVICE KsDevice;
|
||||||
KMUTEX ControlMutex;
|
KMUTEX ControlMutex;
|
||||||
|
LIST_ENTRY EventList;
|
||||||
|
KSPIN_LOCK EventListLock;
|
||||||
|
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
PKSDEVICE KsDevice;
|
PKSDEVICE KsDevice;
|
||||||
|
|
|
@ -22,6 +22,9 @@ typedef struct
|
||||||
KMUTEX ProcessingMutex;
|
KMUTEX ProcessingMutex;
|
||||||
PFILE_OBJECT FileObject;
|
PFILE_OBJECT FileObject;
|
||||||
|
|
||||||
|
PKSGATE AttachedGate;
|
||||||
|
BOOL OrGate;
|
||||||
|
|
||||||
PFNKSPINPOWER Sleep;
|
PFNKSPINPOWER Sleep;
|
||||||
PFNKSPINPOWER Wake;
|
PFNKSPINPOWER Wake;
|
||||||
PFNKSPINHANDSHAKE Handshake;
|
PFNKSPINHANDSHAKE Handshake;
|
||||||
|
@ -262,7 +265,7 @@ KsPinAcquireProcessingMutex(
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@unimplemented
|
@implemented
|
||||||
*/
|
*/
|
||||||
VOID
|
VOID
|
||||||
NTAPI
|
NTAPI
|
||||||
|
@ -270,11 +273,16 @@ KsPinAttachAndGate(
|
||||||
IN PKSPIN Pin,
|
IN PKSPIN Pin,
|
||||||
IN PKSGATE AndGate OPTIONAL)
|
IN PKSGATE AndGate OPTIONAL)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED
|
IKsPinImpl * This = (IKsPinImpl*)CONTAINING_RECORD(Pin, IKsPinImpl, Pin);
|
||||||
|
|
||||||
|
/* FIXME attach to filter's and gate (filter-centric processing) */
|
||||||
|
|
||||||
|
This->AttachedGate = AndGate;
|
||||||
|
This->OrGate = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@unimplemented
|
@implemented
|
||||||
*/
|
*/
|
||||||
VOID
|
VOID
|
||||||
NTAPI
|
NTAPI
|
||||||
|
@ -282,8 +290,27 @@ KsPinAttachOrGate(
|
||||||
IN PKSPIN Pin,
|
IN PKSPIN Pin,
|
||||||
IN PKSGATE OrGate OPTIONAL)
|
IN PKSGATE OrGate OPTIONAL)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED
|
IKsPinImpl * This = (IKsPinImpl*)CONTAINING_RECORD(Pin, IKsPinImpl, Pin);
|
||||||
|
|
||||||
|
/* FIXME attach to filter's and gate (filter-centric processing) */
|
||||||
|
|
||||||
|
This->AttachedGate = OrGate;
|
||||||
|
This->OrGate = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
@implemented
|
||||||
|
*/
|
||||||
|
PKSGATE
|
||||||
|
NTAPI
|
||||||
|
KsPinGetAndGate(
|
||||||
|
IN PKSPIN Pin)
|
||||||
|
{
|
||||||
|
IKsPinImpl * This = (IKsPinImpl*)CONTAINING_RECORD(Pin, IKsPinImpl, Pin);
|
||||||
|
|
||||||
|
return This->AttachedGate;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@unimplemented
|
@unimplemented
|
||||||
*/
|
*/
|
||||||
|
@ -324,18 +351,6 @@ KsPinGetConnectedFilterInterface(
|
||||||
return STATUS_NOT_IMPLEMENTED;
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
@unimplemented
|
|
||||||
*/
|
|
||||||
PKSGATE
|
|
||||||
NTAPI
|
|
||||||
KsPinGetAndGate(
|
|
||||||
IN PKSPIN Pin)
|
|
||||||
{
|
|
||||||
UNIMPLEMENTED
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@implemented
|
@implemented
|
||||||
*/
|
*/
|
||||||
|
@ -887,7 +902,6 @@ static KSDISPATCH_TABLE PinDispatchTable =
|
||||||
KsDispatchFastReadFailure
|
KsDispatchFastReadFailure
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
KspCreatePin(
|
KspCreatePin(
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
IN PDEVICE_OBJECT DeviceObject,
|
||||||
|
@ -940,6 +954,8 @@ KspCreatePin(
|
||||||
This->BasicHeader.Type = KsObjectTypePin;
|
This->BasicHeader.Type = KsObjectTypePin;
|
||||||
This->BasicHeader.Parent.KsFilter = Filter->lpVtbl->GetStruct(Filter);
|
This->BasicHeader.Parent.KsFilter = Filter->lpVtbl->GetStruct(Filter);
|
||||||
KeInitializeMutex(&This->BasicHeader.ControlMutex, 0);
|
KeInitializeMutex(&This->BasicHeader.ControlMutex, 0);
|
||||||
|
InitializeListHead(&This->BasicHeader.EventList);
|
||||||
|
KeInitializeSpinLock(&This->BasicHeader.EventListLock);
|
||||||
|
|
||||||
/* initialize pin */
|
/* initialize pin */
|
||||||
This->lpVtbl = &vt_IKsPin;
|
This->lpVtbl = &vt_IKsPin;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue