Jacek Caban : ntoskrnl.exe: Support event functions on kernel objects.
Alexandre Julliard
julliard at winehq.org
Tue Mar 26 16:43:14 CDT 2019
Module: wine
Branch: master
Commit: b9c621856ff058c8ec502436da5c57bc7617c27c
URL: https://source.winehq.org/git/wine.git/?a=commit;h=b9c621856ff058c8ec502436da5c57bc7617c27c
Author: Jacek Caban <jacek at codeweavers.com>
Date: Mon Mar 25 14:39:07 2019 +0100
ntoskrnl.exe: Support event functions on kernel objects.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ntoskrnl.exe/sync.c | 16 ++++++++++++----
dlls/ntoskrnl.exe/tests/driver.c | 2 --
2 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/dlls/ntoskrnl.exe/sync.c b/dlls/ntoskrnl.exe/sync.c
index 5a72bc5..3085543 100644
--- a/dlls/ntoskrnl.exe/sync.c
+++ b/dlls/ntoskrnl.exe/sync.c
@@ -224,7 +224,7 @@ POBJECT_TYPE ExEventObjectType = &event_type;
LONG WINAPI KeSetEvent( PRKEVENT event, KPRIORITY increment, BOOLEAN wait )
{
HANDLE handle;
- ULONG ret = 0;
+ LONG ret = 0;
TRACE("event %p, increment %d, wait %u.\n", event, increment, wait);
@@ -238,7 +238,11 @@ LONG WINAPI KeSetEvent( PRKEVENT event, KPRIORITY increment, BOOLEAN wait )
}
else
{
- FIXME("unsupported on kernel objects\n");
+ if ((handle = kernel_object_handle( event, EVENT_MODIFY_STATE )))
+ {
+ NtSetEvent( handle, &ret );
+ NtClose( handle );
+ }
event->Header.SignalState = TRUE;
}
@@ -251,7 +255,7 @@ LONG WINAPI KeSetEvent( PRKEVENT event, KPRIORITY increment, BOOLEAN wait )
LONG WINAPI KeResetEvent( PRKEVENT event )
{
HANDLE handle;
- ULONG ret = 0;
+ LONG ret = 0;
TRACE("event %p.\n", event);
@@ -265,7 +269,11 @@ LONG WINAPI KeResetEvent( PRKEVENT event )
}
else
{
- FIXME("unsupported on kernel objects\n");
+ if ((handle = kernel_object_handle( event, EVENT_MODIFY_STATE )))
+ {
+ NtResetEvent( handle, &ret );
+ NtClose( handle );
+ }
event->Header.SignalState = FALSE;
}
diff --git a/dlls/ntoskrnl.exe/tests/driver.c b/dlls/ntoskrnl.exe/tests/driver.c
index 0fc0058..8823746 100644
--- a/dlls/ntoskrnl.exe/tests/driver.c
+++ b/dlls/ntoskrnl.exe/tests/driver.c
@@ -461,10 +461,8 @@ static void test_sync(void)
ok(ret == 0, "got %#x\n", ret);
KeResetEvent(event);
ret = wait_single(event, 0);
- todo_wine
ok(ret == STATUS_TIMEOUT, "got %#x\n", ret);
ret = wait_single_handle(handle, 0);
- todo_wine
ok(ret == STATUS_TIMEOUT, "got %#x\n", ret);
KeSetEvent(event, 0, FALSE);
More information about the wine-cvs
mailing list