Module: wine Branch: master Commit: 6a686d63ad92c80cdca08e1a67856a431031b600 URL: http://source.winehq.org/git/wine.git/?a=commit;h=6a686d63ad92c80cdca08e1a67...
Author: Aric Stewart aric@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@codeweavers.com Signed-off-by: Sebastian Lackner sebastian@fds-team.de Signed-off-by: Alexandre Julliard julliard@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; }