Aric Stewart : ntoskrnl.exe: Implement ObReferenceObjectByName but only for loaded drivers.

Alexandre Julliard julliard at winehq.org
Thu Aug 4 17:20:18 CDT 2016


Module: wine
Branch: master
Commit: 6a686d63ad92c80cdca08e1a67856a431031b600
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=6a686d63ad92c80cdca08e1a67856a431031b600

Author: Aric Stewart <aric at codeweavers.com>
Date:   Thu Aug  4 11:53:57 2016 -0500

ntoskrnl.exe: Implement ObReferenceObjectByName but only for loaded drivers.

Signed-off-by: Aric Stewart <aric at codeweavers.com>
Signed-off-by: Sebastian Lackner <sebastian at fds-team.de>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/ntoskrnl.exe/ntoskrnl.c | 32 ++++++++++++++++++++++++++++++--
 1 file changed, 30 insertions(+), 2 deletions(-)

diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c
index 25187d3..d812692 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.c
+++ b/dlls/ntoskrnl.exe/ntoskrnl.c
@@ -2107,8 +2107,36 @@ NTSTATUS WINAPI ObReferenceObjectByName( UNICODE_STRING *ObjectName,
                                          void *ParseContext,
                                          void **Object)
 {
-    FIXME("stub\n");
-    return STATUS_NOT_IMPLEMENTED;
+    struct wine_driver *driver;
+    struct wine_rb_entry *entry;
+
+    TRACE("mostly-stub:%s %i %p %i %p %i %p %p\n", debugstr_us(ObjectName),
+        Attributes, AccessState, DesiredAccess, ObjectType, AccessMode,
+        ParseContext, Object);
+
+    if (AccessState) FIXME("Unhandled AccessState\n");
+    if (DesiredAccess) FIXME("Unhandled DesiredAccess\n");
+    if (ParseContext) FIXME("Unhandled ParseContext\n");
+    if (ObjectType) FIXME("Unhandled ObjectType\n");
+
+    if (AccessMode != KernelMode)
+    {
+        FIXME("UserMode access not implemented\n");
+        return STATUS_NOT_IMPLEMENTED;
+    }
+
+    EnterCriticalSection(&drivers_cs);
+    entry = wine_rb_get(&wine_drivers, ObjectName);
+    LeaveCriticalSection(&drivers_cs);
+    if (!entry)
+    {
+        FIXME("Object (%s) not found, may not be tracked.\n", debugstr_us(ObjectName));
+        return STATUS_NOT_IMPLEMENTED;
+    }
+
+    driver = WINE_RB_ENTRY_VALUE(entry, struct wine_driver, entry);
+    *Object = &driver->driver_obj;
+    return STATUS_SUCCESS;
 }
 
 




More information about the wine-cvs mailing list