Module: wine Branch: master Commit: 088ababfc24751b951008570f6160a1e8dca0e0c URL: https://source.winehq.org/git/wine.git/?a=commit;h=088ababfc24751b951008570f...
Author: Zebediah Figura z.figura12@gmail.com Date: Wed Jul 15 20:27:56 2020 -0500
ntoskrnl.exe: Create symbolic links as permanent objects.
Signed-off-by: Zebediah Figura z.figura12@gmail.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ntoskrnl.exe/ntoskrnl.c | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-)
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c index d407cffee6..fa85979d0b 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/ntoskrnl.c @@ -1591,17 +1591,19 @@ NTSTATUS WINAPI IoCreateSymbolicLink( UNICODE_STRING *name, UNICODE_STRING *targ { HANDLE handle; OBJECT_ATTRIBUTES attr; + NTSTATUS ret;
attr.Length = sizeof(attr); attr.RootDirectory = 0; attr.ObjectName = name; - attr.Attributes = OBJ_CASE_INSENSITIVE | OBJ_OPENIF; + attr.Attributes = OBJ_CASE_INSENSITIVE | OBJ_OPENIF | OBJ_PERMANENT; attr.SecurityDescriptor = NULL; attr.SecurityQualityOfService = NULL;
TRACE( "%s -> %s\n", debugstr_us(name), debugstr_us(target) ); - /* FIXME: store handle somewhere */ - return NtCreateSymbolicLinkObject( &handle, SYMBOLIC_LINK_ALL_ACCESS, &attr, target ); + if (!(ret = NtCreateSymbolicLinkObject( &handle, SYMBOLIC_LINK_ALL_ACCESS, &attr, target ))) + NtClose( handle ); + return ret; }
@@ -1612,17 +1614,19 @@ NTSTATUS WINAPI IoCreateUnprotectedSymbolicLink( UNICODE_STRING *name, UNICODE_S { HANDLE handle; OBJECT_ATTRIBUTES attr; + NTSTATUS ret;
attr.Length = sizeof(attr); attr.RootDirectory = 0; attr.ObjectName = name; - attr.Attributes = OBJ_CASE_INSENSITIVE | OBJ_OPENIF; + attr.Attributes = OBJ_CASE_INSENSITIVE | OBJ_OPENIF | OBJ_PERMANENT; attr.SecurityDescriptor = NULL; attr.SecurityQualityOfService = NULL;
TRACE( "%s -> %s\n", debugstr_us(name), debugstr_us(target) ); - /* FIXME: store handle somewhere */ - return NtCreateSymbolicLinkObject( &handle, SYMBOLIC_LINK_ALL_ACCESS, &attr, target ); + if (!(ret = NtCreateSymbolicLinkObject( &handle, SYMBOLIC_LINK_ALL_ACCESS, &attr, target ))) + NtClose( handle ); + return ret; }
@@ -1644,12 +1648,7 @@ NTSTATUS WINAPI IoDeleteSymbolicLink( UNICODE_STRING *name )
if (!(status = NtOpenSymbolicLinkObject( &handle, 0, &attr ))) { - SERVER_START_REQ( unlink_object ) - { - req->handle = wine_server_obj_handle( handle ); - status = wine_server_call( req ); - } - SERVER_END_REQ; + NtMakeTemporaryObject( handle ); NtClose( handle ); } return status;