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@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;
}