Re: [PATCH v4] ntoskrnl.exe: Implement ObReferenceObjectByName for created drivers
On 04.08.2016 18:24, Aric Stewart wrote:
v2: Suggestions from Sebastian Lackner v3: eliminate duplicated driver_name v4: use the rb_tree
Signed-off-by: Aric Stewart <aric(a)codeweavers.com> --- dlls/ntoskrnl.exe/ntoskrnl.c | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-)
0001-ntoskrnl.exe-Implement-ObReferenceObjectByName-but-onl.txt
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c index 25187d3..883e845 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/ntoskrnl.c @@ -2107,8 +2107,34 @@ 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; + } + + entry = wine_rb_get(&wine_drivers, ObjectName);
You will have to lock the CS before accessing the tree structure.
+ if (!entry) + { + FIXME("Object not found, may not be tracked.\n");
For debugging purposes it would make sense to dump the name here.
+ return STATUS_NOT_IMPLEMENTED; + } + + driver = WINE_RB_ENTRY_VALUE(entry, struct wine_driver, entry); + *Object = &driver->driver_obj; + return STATUS_SUCCESS; }
participants (1)
-
Sebastian Lackner