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