| /* SPDX-License-Identifier: MIT */ |
| /* |
| * VirtualBox Shared Folders: host interface definition. |
| * |
| * Copyright (C) 2006-2018 Oracle Corporation |
| */ |
| |
| #ifndef SHFL_HOSTINTF_H |
| #define SHFL_HOSTINTF_H |
| |
| #include <linux/vbox_vmmdev_types.h> |
| |
| /* The max in/out buffer size for a FN_READ or FN_WRITE call */ |
| #define SHFL_MAX_RW_COUNT (16 * SZ_1M) |
| |
| /* |
| * Structures shared between guest and the service |
| * can be relocated and use offsets to point to variable |
| * length parts. |
| * |
| * Shared folders protocol works with handles. |
| * Before doing any action on a file system object, |
| * one have to obtain the object handle via a SHFL_FN_CREATE |
| * request. A handle must be closed with SHFL_FN_CLOSE. |
| */ |
| |
| enum { |
| SHFL_FN_QUERY_MAPPINGS = 1, /* Query mappings changes. */ |
| SHFL_FN_QUERY_MAP_NAME = 2, /* Query map name. */ |
| SHFL_FN_CREATE = 3, /* Open/create object. */ |
| SHFL_FN_CLOSE = 4, /* Close object handle. */ |
| SHFL_FN_READ = 5, /* Read object content. */ |
| SHFL_FN_WRITE = 6, /* Write new object content. */ |
| SHFL_FN_LOCK = 7, /* Lock/unlock a range in the object. */ |
| SHFL_FN_LIST = 8, /* List object content. */ |
| SHFL_FN_INFORMATION = 9, /* Query/set object information. */ |
| /* Note function number 10 is not used! */ |
| SHFL_FN_REMOVE = 11, /* Remove object */ |
| SHFL_FN_MAP_FOLDER_OLD = 12, /* Map folder (legacy) */ |
| SHFL_FN_UNMAP_FOLDER = 13, /* Unmap folder */ |
| SHFL_FN_RENAME = 14, /* Rename object */ |
| SHFL_FN_FLUSH = 15, /* Flush file */ |
| SHFL_FN_SET_UTF8 = 16, /* Select UTF8 filename encoding */ |
| SHFL_FN_MAP_FOLDER = 17, /* Map folder */ |
| SHFL_FN_READLINK = 18, /* Read symlink dest (as of VBox 4.0) */ |
| SHFL_FN_SYMLINK = 19, /* Create symlink (as of VBox 4.0) */ |
| SHFL_FN_SET_SYMLINKS = 20, /* Ask host to show symlinks (4.0+) */ |
| }; |
| |
| /* Root handles for a mapping are of type u32, Root handles are unique. */ |
| #define SHFL_ROOT_NIL UINT_MAX |
| |
| /* Shared folders handle for an opened object are of type u64. */ |
| #define SHFL_HANDLE_NIL ULLONG_MAX |
| |
| /* Hardcoded maximum length (in chars) of a shared folder name. */ |
| #define SHFL_MAX_LEN (256) |
| /* Hardcoded maximum number of shared folder mapping available to the guest. */ |
| #define SHFL_MAX_MAPPINGS (64) |
| |
| /** Shared folder string buffer structure. */ |
| struct shfl_string { |
| /** Allocated size of the string member in bytes. */ |
| u16 size; |
| |
| /** Length of string without trailing nul in bytes. */ |
| u16 length; |
| |
| /** UTF-8 or UTF-16 string. Nul terminated. */ |
| union { |
| u8 legacy_padding[2]; |
| DECLARE_FLEX_ARRAY(u8, utf8); |
| DECLARE_FLEX_ARRAY(u16, utf16); |
| } string; |
| }; |
| VMMDEV_ASSERT_SIZE(shfl_string, 6); |
| |
| /* The size of shfl_string w/o the string part. */ |
| #define SHFLSTRING_HEADER_SIZE 4 |
| |
| /* Calculate size of the string. */ |
| static inline u32 shfl_string_buf_size(const struct shfl_string *string) |
| { |
| return string ? SHFLSTRING_HEADER_SIZE + string->size : 0; |
| } |
| |
| /* Set user id on execution (S_ISUID). */ |
| #define SHFL_UNIX_ISUID 0004000U |
| /* Set group id on execution (S_ISGID). */ |
| #define SHFL_UNIX_ISGID 0002000U |
| /* Sticky bit (S_ISVTX / S_ISTXT). */ |
| #define SHFL_UNIX_ISTXT 0001000U |
| |
| /* Owner readable (S_IRUSR). */ |
| #define SHFL_UNIX_IRUSR 0000400U |
| /* Owner writable (S_IWUSR). */ |
| #define SHFL_UNIX_IWUSR 0000200U |
| /* Owner executable (S_IXUSR). */ |
| #define SHFL_UNIX_IXUSR 0000100U |
| |
| /* Group readable (S_IRGRP). */ |
| #define SHFL_UNIX_IRGRP 0000040U |
| /* Group writable (S_IWGRP). */ |
| #define SHFL_UNIX_IWGRP 0000020U |
| /* Group executable (S_IXGRP). */ |
| #define SHFL_UNIX_IXGRP 0000010U |
| |
| /* Other readable (S_IROTH). */ |
| #define SHFL_UNIX_IROTH 0000004U |
| /* Other writable (S_IWOTH). */ |
| #define SHFL_UNIX_IWOTH 0000002U |
| /* Other executable (S_IXOTH). */ |
| #define SHFL_UNIX_IXOTH 0000001U |
| |
| /* Named pipe (fifo) (S_IFIFO). */ |
| #define SHFL_TYPE_FIFO 0010000U |
| /* Character device (S_IFCHR). */ |
| #define SHFL_TYPE_DEV_CHAR 0020000U |
| /* Directory (S_IFDIR). */ |
| #define SHFL_TYPE_DIRECTORY 0040000U |
| /* Block device (S_IFBLK). */ |
| #define SHFL_TYPE_DEV_BLOCK 0060000U |
| /* Regular file (S_IFREG). */ |
| #define SHFL_TYPE_FILE 0100000U |
| /* Symbolic link (S_IFLNK). */ |
| #define SHFL_TYPE_SYMLINK 0120000U |
| /* Socket (S_IFSOCK). */ |
| #define SHFL_TYPE_SOCKET 0140000U |
| /* Whiteout (S_IFWHT). */ |
| #define SHFL_TYPE_WHITEOUT 0160000U |
| /* Type mask (S_IFMT). */ |
| #define SHFL_TYPE_MASK 0170000U |
| |
| /* Checks the mode flags indicate a directory (S_ISDIR). */ |
| #define SHFL_IS_DIRECTORY(m) (((m) & SHFL_TYPE_MASK) == SHFL_TYPE_DIRECTORY) |
| /* Checks the mode flags indicate a symbolic link (S_ISLNK). */ |
| #define SHFL_IS_SYMLINK(m) (((m) & SHFL_TYPE_MASK) == SHFL_TYPE_SYMLINK) |
| |
| /** The available additional information in a shfl_fsobjattr object. */ |
| enum shfl_fsobjattr_add { |
| /** No additional information is available / requested. */ |
| SHFLFSOBJATTRADD_NOTHING = 1, |
| /** |
| * The additional unix attributes (shfl_fsobjattr::u::unix_attr) are |
| * available / requested. |
| */ |
| SHFLFSOBJATTRADD_UNIX, |
| /** |
| * The additional extended attribute size (shfl_fsobjattr::u::size) is |
| * available / requested. |
| */ |
| SHFLFSOBJATTRADD_EASIZE, |
| /** |
| * The last valid item (inclusive). |
| * The valid range is SHFLFSOBJATTRADD_NOTHING thru |
| * SHFLFSOBJATTRADD_LAST. |
| */ |
| SHFLFSOBJATTRADD_LAST = SHFLFSOBJATTRADD_EASIZE, |
| |
| /** The usual 32-bit hack. */ |
| SHFLFSOBJATTRADD_32BIT_SIZE_HACK = 0x7fffffff |
| }; |
| |
| /** |
| * Additional unix Attributes, these are available when |
| * shfl_fsobjattr.additional == SHFLFSOBJATTRADD_UNIX. |
| */ |
| struct shfl_fsobjattr_unix { |
| /** |
| * The user owning the filesystem object (st_uid). |
| * This field is ~0U if not supported. |
| */ |
| u32 uid; |
| |
| /** |
| * The group the filesystem object is assigned (st_gid). |
| * This field is ~0U if not supported. |
| */ |
| u32 gid; |
| |
| /** |
| * Number of hard links to this filesystem object (st_nlink). |
| * This field is 1 if the filesystem doesn't support hardlinking or |
| * the information isn't available. |
| */ |
| u32 hardlinks; |
| |
| /** |
| * The device number of the device which this filesystem object resides |
| * on (st_dev). This field is 0 if this information is not available. |
| */ |
| u32 inode_id_device; |
| |
| /** |
| * The unique identifier (within the filesystem) of this filesystem |
| * object (st_ino). Together with inode_id_device, this field can be |
| * used as a OS wide unique id, when both their values are not 0. |
| * This field is 0 if the information is not available. |
| */ |
| u64 inode_id; |
| |
| /** |
| * User flags (st_flags). |
| * This field is 0 if this information is not available. |
| */ |
| u32 flags; |
| |
| /** |
| * The current generation number (st_gen). |
| * This field is 0 if this information is not available. |
| */ |
| u32 generation_id; |
| |
| /** |
| * The device number of a char. or block device type object (st_rdev). |
| * This field is 0 if the file isn't a char. or block device or when |
| * the OS doesn't use the major+minor device idenfication scheme. |
| */ |
| u32 device; |
| } __packed; |
| |
| /** Extended attribute size. */ |
| struct shfl_fsobjattr_easize { |
| /** Size of EAs. */ |
| s64 cb; |
| } __packed; |
| |
| /** Shared folder filesystem object attributes. */ |
| struct shfl_fsobjattr { |
| /** Mode flags (st_mode). SHFL_UNIX_*, SHFL_TYPE_*, and SHFL_DOS_*. */ |
| u32 mode; |
| |
| /** The additional attributes available. */ |
| enum shfl_fsobjattr_add additional; |
| |
| /** |
| * Additional attributes. |
| * |
| * Unless explicitly specified to an API, the API can provide additional |
| * data as it is provided by the underlying OS. |
| */ |
| union { |
| struct shfl_fsobjattr_unix unix_attr; |
| struct shfl_fsobjattr_easize size; |
| } __packed u; |
| } __packed; |
| VMMDEV_ASSERT_SIZE(shfl_fsobjattr, 44); |
| |
| struct shfl_timespec { |
| s64 ns_relative_to_unix_epoch; |
| }; |
| |
| /** Filesystem object information structure. */ |
| struct shfl_fsobjinfo { |
| /** |
| * Logical size (st_size). |
| * For normal files this is the size of the file. |
| * For symbolic links, this is the length of the path name contained |
| * in the symbolic link. |
| * For other objects this fields needs to be specified. |
| */ |
| s64 size; |
| |
| /** Disk allocation size (st_blocks * DEV_BSIZE). */ |
| s64 allocated; |
| |
| /** Time of last access (st_atime). */ |
| struct shfl_timespec access_time; |
| |
| /** Time of last data modification (st_mtime). */ |
| struct shfl_timespec modification_time; |
| |
| /** |
| * Time of last status change (st_ctime). |
| * If not available this is set to modification_time. |
| */ |
| struct shfl_timespec change_time; |
| |
| /** |
| * Time of file birth (st_birthtime). |
| * If not available this is set to change_time. |
| */ |
| struct shfl_timespec birth_time; |
| |
| /** Attributes. */ |
| struct shfl_fsobjattr attr; |
| |
| } __packed; |
| VMMDEV_ASSERT_SIZE(shfl_fsobjinfo, 92); |
| |
| /** |
| * result of an open/create request. |
| * Along with handle value the result code |
| * identifies what has happened while |
| * trying to open the object. |
| */ |
| enum shfl_create_result { |
| SHFL_NO_RESULT, |
| /** Specified path does not exist. */ |
| SHFL_PATH_NOT_FOUND, |
| /** Path to file exists, but the last component does not. */ |
| SHFL_FILE_NOT_FOUND, |
| /** File already exists and either has been opened or not. */ |
| SHFL_FILE_EXISTS, |
| /** New file was created. */ |
| SHFL_FILE_CREATED, |
| /** Existing file was replaced or overwritten. */ |
| SHFL_FILE_REPLACED |
| }; |
| |
| /* No flags. Initialization value. */ |
| #define SHFL_CF_NONE (0x00000000) |
| |
| /* |
| * Only lookup the object, do not return a handle. When this is set all other |
| * flags are ignored. |
| */ |
| #define SHFL_CF_LOOKUP (0x00000001) |
| |
| /* |
| * Open parent directory of specified object. |
| * Useful for the corresponding Windows FSD flag |
| * and for opening paths like \\dir\\*.* to search the 'dir'. |
| */ |
| #define SHFL_CF_OPEN_TARGET_DIRECTORY (0x00000002) |
| |
| /* Create/open a directory. */ |
| #define SHFL_CF_DIRECTORY (0x00000004) |
| |
| /* |
| * Open/create action to do if object exists |
| * and if the object does not exists. |
| * REPLACE file means atomically DELETE and CREATE. |
| * OVERWRITE file means truncating the file to 0 and |
| * setting new size. |
| * When opening an existing directory REPLACE and OVERWRITE |
| * actions are considered invalid, and cause returning |
| * FILE_EXISTS with NIL handle. |
| */ |
| #define SHFL_CF_ACT_MASK_IF_EXISTS (0x000000f0) |
| #define SHFL_CF_ACT_MASK_IF_NEW (0x00000f00) |
| |
| /* What to do if object exists. */ |
| #define SHFL_CF_ACT_OPEN_IF_EXISTS (0x00000000) |
| #define SHFL_CF_ACT_FAIL_IF_EXISTS (0x00000010) |
| #define SHFL_CF_ACT_REPLACE_IF_EXISTS (0x00000020) |
| #define SHFL_CF_ACT_OVERWRITE_IF_EXISTS (0x00000030) |
| |
| /* What to do if object does not exist. */ |
| #define SHFL_CF_ACT_CREATE_IF_NEW (0x00000000) |
| #define SHFL_CF_ACT_FAIL_IF_NEW (0x00000100) |
| |
| /* Read/write requested access for the object. */ |
| #define SHFL_CF_ACCESS_MASK_RW (0x00003000) |
| |
| /* No access requested. */ |
| #define SHFL_CF_ACCESS_NONE (0x00000000) |
| /* Read access requested. */ |
| #define SHFL_CF_ACCESS_READ (0x00001000) |
| /* Write access requested. */ |
| #define SHFL_CF_ACCESS_WRITE (0x00002000) |
| /* Read/Write access requested. */ |
| #define SHFL_CF_ACCESS_READWRITE (0x00003000) |
| |
| /* Requested share access for the object. */ |
| #define SHFL_CF_ACCESS_MASK_DENY (0x0000c000) |
| |
| /* Allow any access. */ |
| #define SHFL_CF_ACCESS_DENYNONE (0x00000000) |
| /* Do not allow read. */ |
| #define SHFL_CF_ACCESS_DENYREAD (0x00004000) |
| /* Do not allow write. */ |
| #define SHFL_CF_ACCESS_DENYWRITE (0x00008000) |
| /* Do not allow access. */ |
| #define SHFL_CF_ACCESS_DENYALL (0x0000c000) |
| |
| /* Requested access to attributes of the object. */ |
| #define SHFL_CF_ACCESS_MASK_ATTR (0x00030000) |
| |
| /* No access requested. */ |
| #define SHFL_CF_ACCESS_ATTR_NONE (0x00000000) |
| /* Read access requested. */ |
| #define SHFL_CF_ACCESS_ATTR_READ (0x00010000) |
| /* Write access requested. */ |
| #define SHFL_CF_ACCESS_ATTR_WRITE (0x00020000) |
| /* Read/Write access requested. */ |
| #define SHFL_CF_ACCESS_ATTR_READWRITE (0x00030000) |
| |
| /* |
| * The file is opened in append mode. |
| * Ignored if SHFL_CF_ACCESS_WRITE is not set. |
| */ |
| #define SHFL_CF_ACCESS_APPEND (0x00040000) |
| |
| /** Create parameters buffer struct for SHFL_FN_CREATE call */ |
| struct shfl_createparms { |
| /** Returned handle of opened object. */ |
| u64 handle; |
| |
| /** Returned result of the operation */ |
| enum shfl_create_result result; |
| |
| /** SHFL_CF_* */ |
| u32 create_flags; |
| |
| /** |
| * Attributes of object to create and |
| * returned actual attributes of opened/created object. |
| */ |
| struct shfl_fsobjinfo info; |
| } __packed; |
| |
| /** Shared Folder directory information */ |
| struct shfl_dirinfo { |
| /** Full information about the object. */ |
| struct shfl_fsobjinfo info; |
| /** |
| * The length of the short field (number of UTF16 chars). |
| * It is 16-bit for reasons of alignment. |
| */ |
| u16 short_name_len; |
| /** |
| * The short name for 8.3 compatibility. |
| * Empty string if not available. |
| */ |
| u16 short_name[14]; |
| struct shfl_string name; |
| }; |
| |
| /** Shared folder filesystem properties. */ |
| struct shfl_fsproperties { |
| /** |
| * The maximum size of a filesystem object name. |
| * This does not include the '\\0'. |
| */ |
| u32 max_component_len; |
| |
| /** |
| * True if the filesystem is remote. |
| * False if the filesystem is local. |
| */ |
| bool remote; |
| |
| /** |
| * True if the filesystem is case sensitive. |
| * False if the filesystem is case insensitive. |
| */ |
| bool case_sensitive; |
| |
| /** |
| * True if the filesystem is mounted read only. |
| * False if the filesystem is mounted read write. |
| */ |
| bool read_only; |
| |
| /** |
| * True if the filesystem can encode unicode object names. |
| * False if it can't. |
| */ |
| bool supports_unicode; |
| |
| /** |
| * True if the filesystem is compresses. |
| * False if it isn't or we don't know. |
| */ |
| bool compressed; |
| |
| /** |
| * True if the filesystem compresses of individual files. |
| * False if it doesn't or we don't know. |
| */ |
| bool file_compression; |
| }; |
| VMMDEV_ASSERT_SIZE(shfl_fsproperties, 12); |
| |
| struct shfl_volinfo { |
| s64 total_allocation_bytes; |
| s64 available_allocation_bytes; |
| u32 bytes_per_allocation_unit; |
| u32 bytes_per_sector; |
| u32 serial; |
| struct shfl_fsproperties properties; |
| }; |
| |
| |
| /** SHFL_FN_MAP_FOLDER Parameters structure. */ |
| struct shfl_map_folder { |
| /** |
| * pointer, in: |
| * Points to struct shfl_string buffer. |
| */ |
| struct vmmdev_hgcm_function_parameter path; |
| |
| /** |
| * pointer, out: SHFLROOT (u32) |
| * Root handle of the mapping which name is queried. |
| */ |
| struct vmmdev_hgcm_function_parameter root; |
| |
| /** |
| * pointer, in: UTF16 |
| * Path delimiter |
| */ |
| struct vmmdev_hgcm_function_parameter delimiter; |
| |
| /** |
| * pointer, in: SHFLROOT (u32) |
| * Case senstive flag |
| */ |
| struct vmmdev_hgcm_function_parameter case_sensitive; |
| |
| }; |
| |
| /* Number of parameters */ |
| #define SHFL_CPARMS_MAP_FOLDER (4) |
| |
| |
| /** SHFL_FN_UNMAP_FOLDER Parameters structure. */ |
| struct shfl_unmap_folder { |
| /** |
| * pointer, in: SHFLROOT (u32) |
| * Root handle of the mapping which name is queried. |
| */ |
| struct vmmdev_hgcm_function_parameter root; |
| |
| }; |
| |
| /* Number of parameters */ |
| #define SHFL_CPARMS_UNMAP_FOLDER (1) |
| |
| |
| /** SHFL_FN_CREATE Parameters structure. */ |
| struct shfl_create { |
| /** |
| * pointer, in: SHFLROOT (u32) |
| * Root handle of the mapping which name is queried. |
| */ |
| struct vmmdev_hgcm_function_parameter root; |
| |
| /** |
| * pointer, in: |
| * Points to struct shfl_string buffer. |
| */ |
| struct vmmdev_hgcm_function_parameter path; |
| |
| /** |
| * pointer, in/out: |
| * Points to struct shfl_createparms buffer. |
| */ |
| struct vmmdev_hgcm_function_parameter parms; |
| |
| }; |
| |
| /* Number of parameters */ |
| #define SHFL_CPARMS_CREATE (3) |
| |
| |
| /** SHFL_FN_CLOSE Parameters structure. */ |
| struct shfl_close { |
| /** |
| * pointer, in: SHFLROOT (u32) |
| * Root handle of the mapping which name is queried. |
| */ |
| struct vmmdev_hgcm_function_parameter root; |
| |
| /** |
| * value64, in: |
| * SHFLHANDLE (u64) of object to close. |
| */ |
| struct vmmdev_hgcm_function_parameter handle; |
| |
| }; |
| |
| /* Number of parameters */ |
| #define SHFL_CPARMS_CLOSE (2) |
| |
| |
| /** SHFL_FN_READ Parameters structure. */ |
| struct shfl_read { |
| /** |
| * pointer, in: SHFLROOT (u32) |
| * Root handle of the mapping which name is queried. |
| */ |
| struct vmmdev_hgcm_function_parameter root; |
| |
| /** |
| * value64, in: |
| * SHFLHANDLE (u64) of object to read from. |
| */ |
| struct vmmdev_hgcm_function_parameter handle; |
| |
| /** |
| * value64, in: |
| * Offset to read from. |
| */ |
| struct vmmdev_hgcm_function_parameter offset; |
| |
| /** |
| * value64, in/out: |
| * Bytes to read/How many were read. |
| */ |
| struct vmmdev_hgcm_function_parameter cb; |
| |
| /** |
| * pointer, out: |
| * Buffer to place data to. |
| */ |
| struct vmmdev_hgcm_function_parameter buffer; |
| |
| }; |
| |
| /* Number of parameters */ |
| #define SHFL_CPARMS_READ (5) |
| |
| |
| /** SHFL_FN_WRITE Parameters structure. */ |
| struct shfl_write { |
| /** |
| * pointer, in: SHFLROOT (u32) |
| * Root handle of the mapping which name is queried. |
| */ |
| struct vmmdev_hgcm_function_parameter root; |
| |
| /** |
| * value64, in: |
| * SHFLHANDLE (u64) of object to write to. |
| */ |
| struct vmmdev_hgcm_function_parameter handle; |
| |
| /** |
| * value64, in: |
| * Offset to write to. |
| */ |
| struct vmmdev_hgcm_function_parameter offset; |
| |
| /** |
| * value64, in/out: |
| * Bytes to write/How many were written. |
| */ |
| struct vmmdev_hgcm_function_parameter cb; |
| |
| /** |
| * pointer, in: |
| * Data to write. |
| */ |
| struct vmmdev_hgcm_function_parameter buffer; |
| |
| }; |
| |
| /* Number of parameters */ |
| #define SHFL_CPARMS_WRITE (5) |
| |
| |
| /* |
| * SHFL_FN_LIST |
| * Listing information includes variable length RTDIRENTRY[EX] structures. |
| */ |
| |
| #define SHFL_LIST_NONE 0 |
| #define SHFL_LIST_RETURN_ONE 1 |
| |
| /** SHFL_FN_LIST Parameters structure. */ |
| struct shfl_list { |
| /** |
| * pointer, in: SHFLROOT (u32) |
| * Root handle of the mapping which name is queried. |
| */ |
| struct vmmdev_hgcm_function_parameter root; |
| |
| /** |
| * value64, in: |
| * SHFLHANDLE (u64) of object to be listed. |
| */ |
| struct vmmdev_hgcm_function_parameter handle; |
| |
| /** |
| * value32, in: |
| * List flags SHFL_LIST_*. |
| */ |
| struct vmmdev_hgcm_function_parameter flags; |
| |
| /** |
| * value32, in/out: |
| * Bytes to be used for listing information/How many bytes were used. |
| */ |
| struct vmmdev_hgcm_function_parameter cb; |
| |
| /** |
| * pointer, in/optional |
| * Points to struct shfl_string buffer that specifies a search path. |
| */ |
| struct vmmdev_hgcm_function_parameter path; |
| |
| /** |
| * pointer, out: |
| * Buffer to place listing information to. (struct shfl_dirinfo) |
| */ |
| struct vmmdev_hgcm_function_parameter buffer; |
| |
| /** |
| * value32, in/out: |
| * Indicates a key where the listing must be resumed. |
| * in: 0 means start from begin of object. |
| * out: 0 means listing completed. |
| */ |
| struct vmmdev_hgcm_function_parameter resume_point; |
| |
| /** |
| * pointer, out: |
| * Number of files returned |
| */ |
| struct vmmdev_hgcm_function_parameter file_count; |
| }; |
| |
| /* Number of parameters */ |
| #define SHFL_CPARMS_LIST (8) |
| |
| |
| /** SHFL_FN_READLINK Parameters structure. */ |
| struct shfl_readLink { |
| /** |
| * pointer, in: SHFLROOT (u32) |
| * Root handle of the mapping which name is queried. |
| */ |
| struct vmmdev_hgcm_function_parameter root; |
| |
| /** |
| * pointer, in: |
| * Points to struct shfl_string buffer. |
| */ |
| struct vmmdev_hgcm_function_parameter path; |
| |
| /** |
| * pointer, out: |
| * Buffer to place data to. |
| */ |
| struct vmmdev_hgcm_function_parameter buffer; |
| |
| }; |
| |
| /* Number of parameters */ |
| #define SHFL_CPARMS_READLINK (3) |
| |
| |
| /* SHFL_FN_INFORMATION */ |
| |
| /* Mask of Set/Get bit. */ |
| #define SHFL_INFO_MODE_MASK (0x1) |
| /* Get information */ |
| #define SHFL_INFO_GET (0x0) |
| /* Set information */ |
| #define SHFL_INFO_SET (0x1) |
| |
| /* Get name of the object. */ |
| #define SHFL_INFO_NAME (0x2) |
| /* Set size of object (extend/trucate); only applies to file objects */ |
| #define SHFL_INFO_SIZE (0x4) |
| /* Get/Set file object info. */ |
| #define SHFL_INFO_FILE (0x8) |
| /* Get volume information. */ |
| #define SHFL_INFO_VOLUME (0x10) |
| |
| /** SHFL_FN_INFORMATION Parameters structure. */ |
| struct shfl_information { |
| /** |
| * pointer, in: SHFLROOT (u32) |
| * Root handle of the mapping which name is queried. |
| */ |
| struct vmmdev_hgcm_function_parameter root; |
| |
| /** |
| * value64, in: |
| * SHFLHANDLE (u64) of object to be listed. |
| */ |
| struct vmmdev_hgcm_function_parameter handle; |
| |
| /** |
| * value32, in: |
| * SHFL_INFO_* |
| */ |
| struct vmmdev_hgcm_function_parameter flags; |
| |
| /** |
| * value32, in/out: |
| * Bytes to be used for information/How many bytes were used. |
| */ |
| struct vmmdev_hgcm_function_parameter cb; |
| |
| /** |
| * pointer, in/out: |
| * Information to be set/get (shfl_fsobjinfo or shfl_string). Do not |
| * forget to set the shfl_fsobjinfo::attr::additional for a get |
| * operation as well. |
| */ |
| struct vmmdev_hgcm_function_parameter info; |
| |
| }; |
| |
| /* Number of parameters */ |
| #define SHFL_CPARMS_INFORMATION (5) |
| |
| |
| /* SHFL_FN_REMOVE */ |
| |
| #define SHFL_REMOVE_FILE (0x1) |
| #define SHFL_REMOVE_DIR (0x2) |
| #define SHFL_REMOVE_SYMLINK (0x4) |
| |
| /** SHFL_FN_REMOVE Parameters structure. */ |
| struct shfl_remove { |
| /** |
| * pointer, in: SHFLROOT (u32) |
| * Root handle of the mapping which name is queried. |
| */ |
| struct vmmdev_hgcm_function_parameter root; |
| |
| /** |
| * pointer, in: |
| * Points to struct shfl_string buffer. |
| */ |
| struct vmmdev_hgcm_function_parameter path; |
| |
| /** |
| * value32, in: |
| * remove flags (file/directory) |
| */ |
| struct vmmdev_hgcm_function_parameter flags; |
| |
| }; |
| |
| #define SHFL_CPARMS_REMOVE (3) |
| |
| |
| /* SHFL_FN_RENAME */ |
| |
| #define SHFL_RENAME_FILE (0x1) |
| #define SHFL_RENAME_DIR (0x2) |
| #define SHFL_RENAME_REPLACE_IF_EXISTS (0x4) |
| |
| /** SHFL_FN_RENAME Parameters structure. */ |
| struct shfl_rename { |
| /** |
| * pointer, in: SHFLROOT (u32) |
| * Root handle of the mapping which name is queried. |
| */ |
| struct vmmdev_hgcm_function_parameter root; |
| |
| /** |
| * pointer, in: |
| * Points to struct shfl_string src. |
| */ |
| struct vmmdev_hgcm_function_parameter src; |
| |
| /** |
| * pointer, in: |
| * Points to struct shfl_string dest. |
| */ |
| struct vmmdev_hgcm_function_parameter dest; |
| |
| /** |
| * value32, in: |
| * rename flags (file/directory) |
| */ |
| struct vmmdev_hgcm_function_parameter flags; |
| |
| }; |
| |
| #define SHFL_CPARMS_RENAME (4) |
| |
| |
| /** SHFL_FN_SYMLINK Parameters structure. */ |
| struct shfl_symlink { |
| /** |
| * pointer, in: SHFLROOT (u32) |
| * Root handle of the mapping which name is queried. |
| */ |
| struct vmmdev_hgcm_function_parameter root; |
| |
| /** |
| * pointer, in: |
| * Points to struct shfl_string of path for the new symlink. |
| */ |
| struct vmmdev_hgcm_function_parameter new_path; |
| |
| /** |
| * pointer, in: |
| * Points to struct shfl_string of destination for symlink. |
| */ |
| struct vmmdev_hgcm_function_parameter old_path; |
| |
| /** |
| * pointer, out: |
| * Information about created symlink. |
| */ |
| struct vmmdev_hgcm_function_parameter info; |
| |
| }; |
| |
| #define SHFL_CPARMS_SYMLINK (4) |
| |
| #endif |