diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c index c784ee61af3..b5712843f63 100644 --- a/dlls/ntdll/file.c +++ b/dlls/ntdll/file.c @@ -2236,7 +2236,7 @@ NTSTATUS WINAPI NtQueryInformationFile( HANDLE hFile, PIO_STATUS_BLOCK io, sizeof(FILE_STANDARD_INFORMATION), /* FileStandardInformation */ sizeof(FILE_INTERNAL_INFORMATION), /* FileInternalInformation */ sizeof(FILE_EA_INFORMATION), /* FileEaInformation */ - sizeof(FILE_ACCESS_INFORMATION), /* FileAccessInformation */ + 0, /* FileAccessInformation */ sizeof(FILE_NAME_INFORMATION), /* FileNameInformation */ sizeof(FILE_RENAME_INFORMATION)-sizeof(WCHAR), /* FileRenameInformation */ 0, /* FileLinkInformation */ @@ -2309,13 +2309,10 @@ NTSTATUS WINAPI NtQueryInformationFile( HANDLE hFile, PIO_STATUS_BLOCK io, if (len < info_sizes[class]) return io->u.Status = STATUS_INFO_LENGTH_MISMATCH; - if (class != FileAccessInformation) + if ((io->u.Status = server_get_unix_fd( hFile, 0, &fd, &needs_close, NULL, NULL ))) { - if ((io->u.Status = server_get_unix_fd( hFile, 0, &fd, &needs_close, NULL, NULL ))) - { - if (io->u.Status != STATUS_BAD_DEVICE_TYPE) return io->u.Status; - return server_get_file_info( hFile, io, ptr, len, class ); - } + if (io->u.Status != STATUS_BAD_DEVICE_TYPE) return io->u.Status; + return server_get_file_info( hFile, io, ptr, len, class ); } switch (class) @@ -2358,19 +2355,6 @@ NTSTATUS WINAPI NtQueryInformationFile( HANDLE hFile, PIO_STATUS_BLOCK io, info->EaSize = 0; } break; - case FileAccessInformation: - { - FILE_ACCESS_INFORMATION *info = ptr; - SERVER_START_REQ( get_object_info ) - { - req->handle = wine_server_obj_handle( hFile ); - io->u.Status = wine_server_call( req ); - if (io->u.Status == STATUS_SUCCESS) - info->AccessFlags = reply->access; - } - SERVER_END_REQ; - } - break; case FileEndOfFileInformation: if (fd_get_file_info( fd, &st, &attr ) == -1) io->u.Status = FILE_GetNtStatus(); else fill_file_info( &st, attr, ptr, class ); diff --git a/server/fd.c b/server/fd.c index 85d15d92dac..65dc8a2a450 100644 --- a/server/fd.c +++ b/server/fd.c @@ -2178,7 +2178,23 @@ void no_fd_get_file_info( struct fd *fd, obj_handle_t handle, unsigned int info_ /* default get_file_info() routine */ void default_fd_get_file_info( struct fd *fd, obj_handle_t handle, unsigned int info_class ) { - set_error( STATUS_NOT_IMPLEMENTED ); + switch (info_class) + { + case FileAccessInformation: + { + FILE_ACCESS_INFORMATION info; + if (get_reply_max_size() < sizeof(info)) + { + set_error( STATUS_INFO_LENGTH_MISMATCH ); + return; + } + info.AccessFlags = get_handle_access( current->process, handle ); + set_reply_data( &info, sizeof(info) ); + break; + } + default: + set_error( STATUS_NOT_IMPLEMENTED ); + } } /* default get_volume_info() routine */