Alexandre Julliard : ntdll: Add a helper function to open a file object.
Alexandre Julliard
julliard at winehq.org
Thu Jul 8 16:43:50 CDT 2021
Module: wine
Branch: master
Commit: f690266c1186593d1b17d84b89799e779e7483bb
URL: https://source.winehq.org/git/wine.git/?a=commit;h=f690266c1186593d1b17d84b89799e779e7483bb
Author: Alexandre Julliard <julliard at winehq.org>
Date: Thu Jul 8 16:49:10 2021 +0200
ntdll: Add a helper function to open a file object.
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ntdll/unix/file.c | 38 ++++++++++++++++++++++++--------------
1 file changed, 24 insertions(+), 14 deletions(-)
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
index 643daa5ab3f..a655aa94715 100644
--- a/dlls/ntdll/unix/file.c
+++ b/dlls/ntdll/unix/file.c
@@ -1844,6 +1844,27 @@ static NTSTATUS server_get_file_info( HANDLE handle, IO_STATUS_BLOCK *io, void *
}
+static NTSTATUS server_open_file_object( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBUTES *attr,
+ ULONG sharing, ULONG options )
+{
+ NTSTATUS status;
+
+ SERVER_START_REQ( open_file_object )
+ {
+ req->access = access;
+ req->attributes = attr->Attributes;
+ req->rootdir = wine_server_obj_handle( attr->RootDirectory );
+ req->sharing = sharing;
+ req->options = options;
+ wine_server_add_data( req, attr->ObjectName->Buffer, attr->ObjectName->Length );
+ status = wine_server_call( req );
+ *handle = wine_server_ptr_handle( reply->handle );
+ }
+ SERVER_END_REQ;
+ return status;
+}
+
+
/* retrieve device/inode number for all the drives */
static unsigned int get_drives_info( struct file_identity info[MAX_DOS_DRIVES] )
{
@@ -1970,8 +1991,8 @@ static NTSTATUS get_mountmgr_fs_info( HANDLE handle, int fd, struct mountmgr_uni
init_unicode_string( &string, MOUNTMGR_DEVICE_NAME );
InitializeObjectAttributes( &attr, &string, 0, NULL, NULL );
- status = NtOpenFile( &mountmgr, GENERIC_READ | SYNCHRONIZE, &attr, &io,
- FILE_SHARE_READ | FILE_SHARE_WRITE, FILE_SYNCHRONOUS_IO_NONALERT );
+ status = server_open_file_object( &mountmgr, GENERIC_READ | SYNCHRONIZE, &attr,
+ FILE_SHARE_READ | FILE_SHARE_WRITE, FILE_SYNCHRONOUS_IO_NONALERT );
if (status) return status;
status = NtDeviceIoControlFile( mountmgr, NULL, NULL, NULL, &io, IOCTL_MOUNTMGR_QUERY_UNIX_DRIVE,
@@ -3747,18 +3768,7 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU
if (io->u.Status == STATUS_BAD_DEVICE_TYPE)
{
- SERVER_START_REQ( open_file_object )
- {
- req->access = access;
- req->attributes = attr->Attributes;
- req->rootdir = wine_server_obj_handle( attr->RootDirectory );
- req->sharing = sharing;
- req->options = options;
- wine_server_add_data( req, new_attr.ObjectName->Buffer, new_attr.ObjectName->Length );
- io->u.Status = wine_server_call( req );
- *handle = wine_server_ptr_handle( reply->handle );
- }
- SERVER_END_REQ;
+ io->u.Status = server_open_file_object( handle, access, &new_attr, sharing, options );
if (io->u.Status == STATUS_SUCCESS) io->Information = FILE_OPENED;
free( nt_name.Buffer );
return io->u.Status;
More information about the wine-cvs
mailing list