[PATCH v3 resend 3/4] ntdll: Allow NtQueryVolumeInformationFile to query volume information from the mountmgr.
Zebediah Figura
z.figura12 at gmail.com
Wed Oct 28 11:33:04 CDT 2020
On 9/8/20 3:02 PM, Erich E. Hoover wrote:
> From 10add5d0acd423e2fb3d762579493dc50f6e6c96 Mon Sep 17 00:00:00 2001
> From: "Erich E. Hoover" <erich.e.hoover at gmail.com>
> Date: Fri, 12 Jun 2020 14:53:43 -0600
> Subject: ntdll: Allow NtQueryVolumeInformationFile to query volume information
> from the mountmgr.
Though really this patch is more general than that, i.e. it's actually
allowing for asynchronous volume information queries from server objects.
For that matter, I don't know what was requested before, but this patch
split seems a bit awkward. Maybe a better split would be:
0001: allow volume information queries to be asynchronous (including
both the changes to server/fd.c and ntdll/unix/file.c, although maybe
even those should be split...)
0002: implement volume information queries for device files
0003: hook up volume information queries for mountmgr
As a further note, some simple tests (in dlls/ntoskrnl.exe/tests) could
help this series.
>
> Signed-off-by: Erich E. Hoover <erich.e.hoover at gmail.com>
> ---
> dlls/ntdll/unix/file.c | 11 +++++++++++
> 1 file changed, 11 insertions(+)
>
> diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
> index 03e92a5c59e..7c16908959d 100644
> --- a/dlls/ntdll/unix/file.c
> +++ b/dlls/ntdll/unix/file.c
> @@ -6186,15 +6186,26 @@ NTSTATUS WINAPI NtQueryVolumeInformationFile( HANDLE handle, IO_STATUS_BLOCK *io
> io->u.Status = server_get_unix_fd( handle, 0, &fd, &needs_close, NULL, NULL );
> if (io->u.Status == STATUS_BAD_DEVICE_TYPE)
> {
> + struct async_irp *async;
> + HANDLE wait_handle;
> +
> + if (!(async = (struct async_irp *)alloc_fileio( sizeof(*async), irp_completion, handle )))
> + return STATUS_NO_MEMORY;
> + async->buffer = buffer;
> + async->size = length;
> +
> SERVER_START_REQ( get_volume_info )
> {
> + req->async = server_async( handle, &async->io, NULL, NULL, NULL, io );
> req->handle = wine_server_obj_handle( handle );
> req->info_class = info_class;
> wine_server_set_reply( req, buffer, length );
> io->u.Status = wine_server_call( req );
> if (!io->u.Status) io->Information = wine_server_reply_size( reply );
> + wait_handle = wine_server_ptr_handle( reply->wait );
> }
> SERVER_END_REQ;
> + if (wait_handle) io->u.Status = wait_async( wait_handle, TRUE, io );
> return io->u.Status;
> }
> else if (io->u.Status) return io->u.Status;
> --
> 2.17.1
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20201028/c00d0438/attachment.sig>
More information about the wine-devel
mailing list