[PATCH v4] ntoskrnl.exe: Implement ObReferenceObjectByName for created drivers
Sebastian Lackner
sebastian at fds-team.de
Thu Aug 4 11:49:28 CDT 2016
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 at 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;
> }
>
>
>
>
>
More information about the wine-devel
mailing list