From 4ccf5bf0a4240209cdb05b92ce5bd944c060f11c Mon Sep 17 00:00:00 2001 From: Alex Ionescu Date: Mon, 23 Oct 2006 20:49:52 +0000 Subject: [PATCH] - Implement NtSetEventBoostPriority, NtGetCurrentProcessorNumber, NtQueryPortInformationProcess, NtWaitForMultipleObjects32. svn path=/trunk/; revision=24635 --- reactos/ntoskrnl/ex/event.c | 43 ++++++++++++++++++++++++++++------- reactos/ntoskrnl/ex/sysinfo.c | 7 ++++++ reactos/ntoskrnl/lpc/port.c | 8 +++++++ reactos/ntoskrnl/ob/obwait.c | 42 ++++++++++++++++++++++++++++++++++ 4 files changed, 92 insertions(+), 8 deletions(-) diff --git a/reactos/ntoskrnl/ex/event.c b/reactos/ntoskrnl/ex/event.c index 2360927558e..c8998b596f6 100644 --- a/reactos/ntoskrnl/ex/event.c +++ b/reactos/ntoskrnl/ex/event.c @@ -463,7 +463,7 @@ NtSetEvent(IN HANDLE EventHandle, EventHandle, PreviousState); /* Check if we were called from user-mode */ - if((PreviousState) && (PreviousMode != KernelMode)) + if ((PreviousState) && (PreviousMode != KernelMode)) { /* Entry SEH Block */ _SEH_TRY @@ -488,16 +488,14 @@ NtSetEvent(IN HANDLE EventHandle, PreviousMode, (PVOID*)&Event, NULL); - - /* Check for success */ - if(NT_SUCCESS(Status)) + if (NT_SUCCESS(Status)) { /* Set the Event */ LONG Prev = KeSetEvent(Event, EVENT_INCREMENT, FALSE); ObDereferenceObject(Event); /* Check if caller wants the old state back */ - if(PreviousState) + if (PreviousState) { /* Entry SEH Block for return */ _SEH_TRY @@ -511,10 +509,39 @@ NtSetEvent(IN HANDLE EventHandle, } _SEH_END; } - } + } - /* Return Status */ - return Status; + /* Return Status */ + return Status; +} + +/* + * @implemented + */ +NTSTATUS +NTAPI +NtSetEventBoostPriority(IN HANDLE EventHandle) +{ + PKEVENT Event; + NTSTATUS Status; + PAGED_CODE(); + + /* Open the Object */ + Status = ObReferenceObjectByHandle(EventHandle, + EVENT_MODIFY_STATE, + ExEventObjectType, + ExGetPreviousMode(), + (PVOID*)&Event, + NULL); + if (NT_SUCCESS(Status)) + { + /* Set the Event */ + KeSetEventBoostPriority(Event, NULL); + ObDereferenceObject(Event); + } + + /* Return Status */ + return Status; } /* EOF */ diff --git a/reactos/ntoskrnl/ex/sysinfo.c b/reactos/ntoskrnl/ex/sysinfo.c index 9b4b1a42460..27888f155bd 100644 --- a/reactos/ntoskrnl/ex/sysinfo.c +++ b/reactos/ntoskrnl/ex/sysinfo.c @@ -1692,5 +1692,12 @@ NtFlushInstructionCache ( return STATUS_SUCCESS; } +ULONG +NTAPI +NtGetCurrentProcessorNumber(VOID) +{ + /* Just return the CPU */ + return KeGetCurrentProcessorNumber(); +} /* EOF */ diff --git a/reactos/ntoskrnl/lpc/port.c b/reactos/ntoskrnl/lpc/port.c index affb8be8057..e372ad20d81 100644 --- a/reactos/ntoskrnl/lpc/port.c +++ b/reactos/ntoskrnl/lpc/port.c @@ -133,4 +133,12 @@ NtImpersonateClientOfPort (HANDLE PortHandle, return(STATUS_NOT_IMPLEMENTED); } +NTSTATUS +NTAPI +NtQueryPortInformationProcess(VOID) +{ + /* This is all this function does */ + return STATUS_UNSUCCESSFUL; +} + /* EOF */ diff --git a/reactos/ntoskrnl/ob/obwait.c b/reactos/ntoskrnl/ob/obwait.c index 7443928612f..19ea780a2fb 100644 --- a/reactos/ntoskrnl/ob/obwait.c +++ b/reactos/ntoskrnl/ob/obwait.c @@ -277,6 +277,48 @@ Quickie: return Status; } +/*++ +* @name NtWaitForMultipleObjects32 +* @implemented NT5.1 +* +* The NtWaitForMultipleObjects32 routine +* +* @param ObjectCount +* +* +* @param HandleArray +* +* +* @param WaitType +* +* +* @param Alertable +* +* +* @param TimeOut +* +* +* @return STATUS_SUCCESS or appropriate error value. +* +* @remarks None. +* +*--*/ +NTSTATUS +NTAPI +NtWaitForMultipleObjects32(IN ULONG ObjectCount, + IN PLONG Handles, + IN WAIT_TYPE WaitType, + IN BOOLEAN Alertable, + IN PLARGE_INTEGER TimeOut OPTIONAL) +{ + /* FIXME WOW64 */ + return NtWaitForMultipleObjects(ObjectCount, + (PHANDLE)Handles, + WaitType, + Alertable, + TimeOut); +} + /*++ * @name NtWaitForSingleObject * @implemented NT4