From 9a2bba4740e555c488a3ce59017c5c709d8b3319 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Tue, 10 Nov 2009 10:50:57 +0000 Subject: [PATCH] [KS] - Implement KsGenerateEvent svn path=/trunk/; revision=44076 --- reactos/drivers/ksfilter/ks/event.c | 36 ++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/reactos/drivers/ksfilter/ks/event.c b/reactos/drivers/ksfilter/ks/event.c index eae342a6ebe..fedb507a9b9 100644 --- a/reactos/drivers/ksfilter/ks/event.c +++ b/reactos/drivers/ksfilter/ks/event.c @@ -285,7 +285,7 @@ KsFreeEventList( /* - @unimplemented + @implemented */ KSDDKAPI NTSTATUS @@ -293,8 +293,38 @@ NTAPI KsGenerateEvent( IN PKSEVENT_ENTRY EntryEvent) { - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; + if (EntryEvent->NotificationType == KSEVENTF_EVENT_HANDLE || EntryEvent->NotificationType == KSEVENTF_EVENT_OBJECT) + { + // signal event + KeSetEvent(EntryEvent->Object, 0, FALSE); + } + else if (EntryEvent->NotificationType == KSEVENTF_SEMAPHORE_HANDLE || EntryEvent->NotificationType == KSEVENTF_SEMAPHORE_OBJECT) + { + // release semaphore + KeReleaseSemaphore(EntryEvent->Object, 0, EntryEvent->SemaphoreAdjustment, FALSE); + } + else if (EntryEvent->NotificationType == KSEVENTF_DPC) + { + // queue dpc + KeInsertQueueDpc((PRKDPC)EntryEvent->Object, NULL, NULL); + } + else if (EntryEvent->NotificationType == KSEVENTF_WORKITEM) + { + // queue work item + ExQueueWorkItem((PWORK_QUEUE_ITEM)EntryEvent->Object, PtrToUlong(EntryEvent->BufferItem)); + } + else if (EntryEvent->NotificationType == KSEVENTF_KSWORKITEM) + { + // queue work item of ks worker + return KsQueueWorkItem((PKSWORKER)EntryEvent->Object, (PWORK_QUEUE_ITEM)EntryEvent->DpcItem); + } + else + { + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; + } + + return STATUS_SUCCESS; } /* -- 2.17.1