902 lines · c
1/* SPDX-License-Identifier: MIT */2/*3 * VirtualBox Shared Folders: host interface definition.4 *5 * Copyright (C) 2006-2018 Oracle Corporation6 */7 8#ifndef SHFL_HOSTINTF_H9#define SHFL_HOSTINTF_H10 11#include <linux/vbox_vmmdev_types.h>12 13/* The max in/out buffer size for a FN_READ or FN_WRITE call */14#define SHFL_MAX_RW_COUNT (16 * SZ_1M)15 16/*17 * Structures shared between guest and the service18 * can be relocated and use offsets to point to variable19 * length parts.20 *21 * Shared folders protocol works with handles.22 * Before doing any action on a file system object,23 * one have to obtain the object handle via a SHFL_FN_CREATE24 * request. A handle must be closed with SHFL_FN_CLOSE.25 */26 27enum {28 SHFL_FN_QUERY_MAPPINGS = 1, /* Query mappings changes. */29 SHFL_FN_QUERY_MAP_NAME = 2, /* Query map name. */30 SHFL_FN_CREATE = 3, /* Open/create object. */31 SHFL_FN_CLOSE = 4, /* Close object handle. */32 SHFL_FN_READ = 5, /* Read object content. */33 SHFL_FN_WRITE = 6, /* Write new object content. */34 SHFL_FN_LOCK = 7, /* Lock/unlock a range in the object. */35 SHFL_FN_LIST = 8, /* List object content. */36 SHFL_FN_INFORMATION = 9, /* Query/set object information. */37 /* Note function number 10 is not used! */38 SHFL_FN_REMOVE = 11, /* Remove object */39 SHFL_FN_MAP_FOLDER_OLD = 12, /* Map folder (legacy) */40 SHFL_FN_UNMAP_FOLDER = 13, /* Unmap folder */41 SHFL_FN_RENAME = 14, /* Rename object */42 SHFL_FN_FLUSH = 15, /* Flush file */43 SHFL_FN_SET_UTF8 = 16, /* Select UTF8 filename encoding */44 SHFL_FN_MAP_FOLDER = 17, /* Map folder */45 SHFL_FN_READLINK = 18, /* Read symlink dest (as of VBox 4.0) */46 SHFL_FN_SYMLINK = 19, /* Create symlink (as of VBox 4.0) */47 SHFL_FN_SET_SYMLINKS = 20, /* Ask host to show symlinks (4.0+) */48};49 50/* Root handles for a mapping are of type u32, Root handles are unique. */51#define SHFL_ROOT_NIL UINT_MAX52 53/* Shared folders handle for an opened object are of type u64. */54#define SHFL_HANDLE_NIL ULLONG_MAX55 56/* Hardcoded maximum length (in chars) of a shared folder name. */57#define SHFL_MAX_LEN (256)58/* Hardcoded maximum number of shared folder mapping available to the guest. */59#define SHFL_MAX_MAPPINGS (64)60 61/** Shared folder string buffer structure. */62struct shfl_string {63 /** Allocated size of the string member in bytes. */64 u16 size;65 66 /** Length of string without trailing nul in bytes. */67 u16 length;68 69 /** UTF-8 or UTF-16 string. Nul terminated. */70 union {71 u8 legacy_padding[2];72 DECLARE_FLEX_ARRAY(u8, utf8);73 DECLARE_FLEX_ARRAY(u16, utf16);74 } string;75};76VMMDEV_ASSERT_SIZE(shfl_string, 6);77 78/* The size of shfl_string w/o the string part. */79#define SHFLSTRING_HEADER_SIZE 480 81/* Calculate size of the string. */82static inline u32 shfl_string_buf_size(const struct shfl_string *string)83{84 return string ? SHFLSTRING_HEADER_SIZE + string->size : 0;85}86 87/* Set user id on execution (S_ISUID). */88#define SHFL_UNIX_ISUID 0004000U89/* Set group id on execution (S_ISGID). */90#define SHFL_UNIX_ISGID 0002000U91/* Sticky bit (S_ISVTX / S_ISTXT). */92#define SHFL_UNIX_ISTXT 0001000U93 94/* Owner readable (S_IRUSR). */95#define SHFL_UNIX_IRUSR 0000400U96/* Owner writable (S_IWUSR). */97#define SHFL_UNIX_IWUSR 0000200U98/* Owner executable (S_IXUSR). */99#define SHFL_UNIX_IXUSR 0000100U100 101/* Group readable (S_IRGRP). */102#define SHFL_UNIX_IRGRP 0000040U103/* Group writable (S_IWGRP). */104#define SHFL_UNIX_IWGRP 0000020U105/* Group executable (S_IXGRP). */106#define SHFL_UNIX_IXGRP 0000010U107 108/* Other readable (S_IROTH). */109#define SHFL_UNIX_IROTH 0000004U110/* Other writable (S_IWOTH). */111#define SHFL_UNIX_IWOTH 0000002U112/* Other executable (S_IXOTH). */113#define SHFL_UNIX_IXOTH 0000001U114 115/* Named pipe (fifo) (S_IFIFO). */116#define SHFL_TYPE_FIFO 0010000U117/* Character device (S_IFCHR). */118#define SHFL_TYPE_DEV_CHAR 0020000U119/* Directory (S_IFDIR). */120#define SHFL_TYPE_DIRECTORY 0040000U121/* Block device (S_IFBLK). */122#define SHFL_TYPE_DEV_BLOCK 0060000U123/* Regular file (S_IFREG). */124#define SHFL_TYPE_FILE 0100000U125/* Symbolic link (S_IFLNK). */126#define SHFL_TYPE_SYMLINK 0120000U127/* Socket (S_IFSOCK). */128#define SHFL_TYPE_SOCKET 0140000U129/* Whiteout (S_IFWHT). */130#define SHFL_TYPE_WHITEOUT 0160000U131/* Type mask (S_IFMT). */132#define SHFL_TYPE_MASK 0170000U133 134/* Checks the mode flags indicate a directory (S_ISDIR). */135#define SHFL_IS_DIRECTORY(m) (((m) & SHFL_TYPE_MASK) == SHFL_TYPE_DIRECTORY)136/* Checks the mode flags indicate a symbolic link (S_ISLNK). */137#define SHFL_IS_SYMLINK(m) (((m) & SHFL_TYPE_MASK) == SHFL_TYPE_SYMLINK)138 139/** The available additional information in a shfl_fsobjattr object. */140enum shfl_fsobjattr_add {141 /** No additional information is available / requested. */142 SHFLFSOBJATTRADD_NOTHING = 1,143 /**144 * The additional unix attributes (shfl_fsobjattr::u::unix_attr) are145 * available / requested.146 */147 SHFLFSOBJATTRADD_UNIX,148 /**149 * The additional extended attribute size (shfl_fsobjattr::u::size) is150 * available / requested.151 */152 SHFLFSOBJATTRADD_EASIZE,153 /**154 * The last valid item (inclusive).155 * The valid range is SHFLFSOBJATTRADD_NOTHING thru156 * SHFLFSOBJATTRADD_LAST.157 */158 SHFLFSOBJATTRADD_LAST = SHFLFSOBJATTRADD_EASIZE,159 160 /** The usual 32-bit hack. */161 SHFLFSOBJATTRADD_32BIT_SIZE_HACK = 0x7fffffff162};163 164/**165 * Additional unix Attributes, these are available when166 * shfl_fsobjattr.additional == SHFLFSOBJATTRADD_UNIX.167 */168struct shfl_fsobjattr_unix {169 /**170 * The user owning the filesystem object (st_uid).171 * This field is ~0U if not supported.172 */173 u32 uid;174 175 /**176 * The group the filesystem object is assigned (st_gid).177 * This field is ~0U if not supported.178 */179 u32 gid;180 181 /**182 * Number of hard links to this filesystem object (st_nlink).183 * This field is 1 if the filesystem doesn't support hardlinking or184 * the information isn't available.185 */186 u32 hardlinks;187 188 /**189 * The device number of the device which this filesystem object resides190 * on (st_dev). This field is 0 if this information is not available.191 */192 u32 inode_id_device;193 194 /**195 * The unique identifier (within the filesystem) of this filesystem196 * object (st_ino). Together with inode_id_device, this field can be197 * used as a OS wide unique id, when both their values are not 0.198 * This field is 0 if the information is not available.199 */200 u64 inode_id;201 202 /**203 * User flags (st_flags).204 * This field is 0 if this information is not available.205 */206 u32 flags;207 208 /**209 * The current generation number (st_gen).210 * This field is 0 if this information is not available.211 */212 u32 generation_id;213 214 /**215 * The device number of a char. or block device type object (st_rdev).216 * This field is 0 if the file isn't a char. or block device or when217 * the OS doesn't use the major+minor device idenfication scheme.218 */219 u32 device;220} __packed;221 222/** Extended attribute size. */223struct shfl_fsobjattr_easize {224 /** Size of EAs. */225 s64 cb;226} __packed;227 228/** Shared folder filesystem object attributes. */229struct shfl_fsobjattr {230 /** Mode flags (st_mode). SHFL_UNIX_*, SHFL_TYPE_*, and SHFL_DOS_*. */231 u32 mode;232 233 /** The additional attributes available. */234 enum shfl_fsobjattr_add additional;235 236 /**237 * Additional attributes.238 *239 * Unless explicitly specified to an API, the API can provide additional240 * data as it is provided by the underlying OS.241 */242 union {243 struct shfl_fsobjattr_unix unix_attr;244 struct shfl_fsobjattr_easize size;245 } __packed u;246} __packed;247VMMDEV_ASSERT_SIZE(shfl_fsobjattr, 44);248 249struct shfl_timespec {250 s64 ns_relative_to_unix_epoch;251};252 253/** Filesystem object information structure. */254struct shfl_fsobjinfo {255 /**256 * Logical size (st_size).257 * For normal files this is the size of the file.258 * For symbolic links, this is the length of the path name contained259 * in the symbolic link.260 * For other objects this fields needs to be specified.261 */262 s64 size;263 264 /** Disk allocation size (st_blocks * DEV_BSIZE). */265 s64 allocated;266 267 /** Time of last access (st_atime). */268 struct shfl_timespec access_time;269 270 /** Time of last data modification (st_mtime). */271 struct shfl_timespec modification_time;272 273 /**274 * Time of last status change (st_ctime).275 * If not available this is set to modification_time.276 */277 struct shfl_timespec change_time;278 279 /**280 * Time of file birth (st_birthtime).281 * If not available this is set to change_time.282 */283 struct shfl_timespec birth_time;284 285 /** Attributes. */286 struct shfl_fsobjattr attr;287 288} __packed;289VMMDEV_ASSERT_SIZE(shfl_fsobjinfo, 92);290 291/**292 * result of an open/create request.293 * Along with handle value the result code294 * identifies what has happened while295 * trying to open the object.296 */297enum shfl_create_result {298 SHFL_NO_RESULT,299 /** Specified path does not exist. */300 SHFL_PATH_NOT_FOUND,301 /** Path to file exists, but the last component does not. */302 SHFL_FILE_NOT_FOUND,303 /** File already exists and either has been opened or not. */304 SHFL_FILE_EXISTS,305 /** New file was created. */306 SHFL_FILE_CREATED,307 /** Existing file was replaced or overwritten. */308 SHFL_FILE_REPLACED309};310 311/* No flags. Initialization value. */312#define SHFL_CF_NONE (0x00000000)313 314/*315 * Only lookup the object, do not return a handle. When this is set all other316 * flags are ignored.317 */318#define SHFL_CF_LOOKUP (0x00000001)319 320/*321 * Open parent directory of specified object.322 * Useful for the corresponding Windows FSD flag323 * and for opening paths like \\dir\\*.* to search the 'dir'.324 */325#define SHFL_CF_OPEN_TARGET_DIRECTORY (0x00000002)326 327/* Create/open a directory. */328#define SHFL_CF_DIRECTORY (0x00000004)329 330/*331 * Open/create action to do if object exists332 * and if the object does not exists.333 * REPLACE file means atomically DELETE and CREATE.334 * OVERWRITE file means truncating the file to 0 and335 * setting new size.336 * When opening an existing directory REPLACE and OVERWRITE337 * actions are considered invalid, and cause returning338 * FILE_EXISTS with NIL handle.339 */340#define SHFL_CF_ACT_MASK_IF_EXISTS (0x000000f0)341#define SHFL_CF_ACT_MASK_IF_NEW (0x00000f00)342 343/* What to do if object exists. */344#define SHFL_CF_ACT_OPEN_IF_EXISTS (0x00000000)345#define SHFL_CF_ACT_FAIL_IF_EXISTS (0x00000010)346#define SHFL_CF_ACT_REPLACE_IF_EXISTS (0x00000020)347#define SHFL_CF_ACT_OVERWRITE_IF_EXISTS (0x00000030)348 349/* What to do if object does not exist. */350#define SHFL_CF_ACT_CREATE_IF_NEW (0x00000000)351#define SHFL_CF_ACT_FAIL_IF_NEW (0x00000100)352 353/* Read/write requested access for the object. */354#define SHFL_CF_ACCESS_MASK_RW (0x00003000)355 356/* No access requested. */357#define SHFL_CF_ACCESS_NONE (0x00000000)358/* Read access requested. */359#define SHFL_CF_ACCESS_READ (0x00001000)360/* Write access requested. */361#define SHFL_CF_ACCESS_WRITE (0x00002000)362/* Read/Write access requested. */363#define SHFL_CF_ACCESS_READWRITE (0x00003000)364 365/* Requested share access for the object. */366#define SHFL_CF_ACCESS_MASK_DENY (0x0000c000)367 368/* Allow any access. */369#define SHFL_CF_ACCESS_DENYNONE (0x00000000)370/* Do not allow read. */371#define SHFL_CF_ACCESS_DENYREAD (0x00004000)372/* Do not allow write. */373#define SHFL_CF_ACCESS_DENYWRITE (0x00008000)374/* Do not allow access. */375#define SHFL_CF_ACCESS_DENYALL (0x0000c000)376 377/* Requested access to attributes of the object. */378#define SHFL_CF_ACCESS_MASK_ATTR (0x00030000)379 380/* No access requested. */381#define SHFL_CF_ACCESS_ATTR_NONE (0x00000000)382/* Read access requested. */383#define SHFL_CF_ACCESS_ATTR_READ (0x00010000)384/* Write access requested. */385#define SHFL_CF_ACCESS_ATTR_WRITE (0x00020000)386/* Read/Write access requested. */387#define SHFL_CF_ACCESS_ATTR_READWRITE (0x00030000)388 389/*390 * The file is opened in append mode.391 * Ignored if SHFL_CF_ACCESS_WRITE is not set.392 */393#define SHFL_CF_ACCESS_APPEND (0x00040000)394 395/** Create parameters buffer struct for SHFL_FN_CREATE call */396struct shfl_createparms {397 /** Returned handle of opened object. */398 u64 handle;399 400 /** Returned result of the operation */401 enum shfl_create_result result;402 403 /** SHFL_CF_* */404 u32 create_flags;405 406 /**407 * Attributes of object to create and408 * returned actual attributes of opened/created object.409 */410 struct shfl_fsobjinfo info;411} __packed;412 413/** Shared Folder directory information */414struct shfl_dirinfo {415 /** Full information about the object. */416 struct shfl_fsobjinfo info;417 /**418 * The length of the short field (number of UTF16 chars).419 * It is 16-bit for reasons of alignment.420 */421 u16 short_name_len;422 /**423 * The short name for 8.3 compatibility.424 * Empty string if not available.425 */426 u16 short_name[14];427 struct shfl_string name;428};429 430/** Shared folder filesystem properties. */431struct shfl_fsproperties {432 /**433 * The maximum size of a filesystem object name.434 * This does not include the '\\0'.435 */436 u32 max_component_len;437 438 /**439 * True if the filesystem is remote.440 * False if the filesystem is local.441 */442 bool remote;443 444 /**445 * True if the filesystem is case sensitive.446 * False if the filesystem is case insensitive.447 */448 bool case_sensitive;449 450 /**451 * True if the filesystem is mounted read only.452 * False if the filesystem is mounted read write.453 */454 bool read_only;455 456 /**457 * True if the filesystem can encode unicode object names.458 * False if it can't.459 */460 bool supports_unicode;461 462 /**463 * True if the filesystem is compresses.464 * False if it isn't or we don't know.465 */466 bool compressed;467 468 /**469 * True if the filesystem compresses of individual files.470 * False if it doesn't or we don't know.471 */472 bool file_compression;473};474VMMDEV_ASSERT_SIZE(shfl_fsproperties, 12);475 476struct shfl_volinfo {477 s64 total_allocation_bytes;478 s64 available_allocation_bytes;479 u32 bytes_per_allocation_unit;480 u32 bytes_per_sector;481 u32 serial;482 struct shfl_fsproperties properties;483};484 485 486/** SHFL_FN_MAP_FOLDER Parameters structure. */487struct shfl_map_folder {488 /**489 * pointer, in:490 * Points to struct shfl_string buffer.491 */492 struct vmmdev_hgcm_function_parameter path;493 494 /**495 * pointer, out: SHFLROOT (u32)496 * Root handle of the mapping which name is queried.497 */498 struct vmmdev_hgcm_function_parameter root;499 500 /**501 * pointer, in: UTF16502 * Path delimiter503 */504 struct vmmdev_hgcm_function_parameter delimiter;505 506 /**507 * pointer, in: SHFLROOT (u32)508 * Case senstive flag509 */510 struct vmmdev_hgcm_function_parameter case_sensitive;511 512};513 514/* Number of parameters */515#define SHFL_CPARMS_MAP_FOLDER (4)516 517 518/** SHFL_FN_UNMAP_FOLDER Parameters structure. */519struct shfl_unmap_folder {520 /**521 * pointer, in: SHFLROOT (u32)522 * Root handle of the mapping which name is queried.523 */524 struct vmmdev_hgcm_function_parameter root;525 526};527 528/* Number of parameters */529#define SHFL_CPARMS_UNMAP_FOLDER (1)530 531 532/** SHFL_FN_CREATE Parameters structure. */533struct shfl_create {534 /**535 * pointer, in: SHFLROOT (u32)536 * Root handle of the mapping which name is queried.537 */538 struct vmmdev_hgcm_function_parameter root;539 540 /**541 * pointer, in:542 * Points to struct shfl_string buffer.543 */544 struct vmmdev_hgcm_function_parameter path;545 546 /**547 * pointer, in/out:548 * Points to struct shfl_createparms buffer.549 */550 struct vmmdev_hgcm_function_parameter parms;551 552};553 554/* Number of parameters */555#define SHFL_CPARMS_CREATE (3)556 557 558/** SHFL_FN_CLOSE Parameters structure. */559struct shfl_close {560 /**561 * pointer, in: SHFLROOT (u32)562 * Root handle of the mapping which name is queried.563 */564 struct vmmdev_hgcm_function_parameter root;565 566 /**567 * value64, in:568 * SHFLHANDLE (u64) of object to close.569 */570 struct vmmdev_hgcm_function_parameter handle;571 572};573 574/* Number of parameters */575#define SHFL_CPARMS_CLOSE (2)576 577 578/** SHFL_FN_READ Parameters structure. */579struct shfl_read {580 /**581 * pointer, in: SHFLROOT (u32)582 * Root handle of the mapping which name is queried.583 */584 struct vmmdev_hgcm_function_parameter root;585 586 /**587 * value64, in:588 * SHFLHANDLE (u64) of object to read from.589 */590 struct vmmdev_hgcm_function_parameter handle;591 592 /**593 * value64, in:594 * Offset to read from.595 */596 struct vmmdev_hgcm_function_parameter offset;597 598 /**599 * value64, in/out:600 * Bytes to read/How many were read.601 */602 struct vmmdev_hgcm_function_parameter cb;603 604 /**605 * pointer, out:606 * Buffer to place data to.607 */608 struct vmmdev_hgcm_function_parameter buffer;609 610};611 612/* Number of parameters */613#define SHFL_CPARMS_READ (5)614 615 616/** SHFL_FN_WRITE Parameters structure. */617struct shfl_write {618 /**619 * pointer, in: SHFLROOT (u32)620 * Root handle of the mapping which name is queried.621 */622 struct vmmdev_hgcm_function_parameter root;623 624 /**625 * value64, in:626 * SHFLHANDLE (u64) of object to write to.627 */628 struct vmmdev_hgcm_function_parameter handle;629 630 /**631 * value64, in:632 * Offset to write to.633 */634 struct vmmdev_hgcm_function_parameter offset;635 636 /**637 * value64, in/out:638 * Bytes to write/How many were written.639 */640 struct vmmdev_hgcm_function_parameter cb;641 642 /**643 * pointer, in:644 * Data to write.645 */646 struct vmmdev_hgcm_function_parameter buffer;647 648};649 650/* Number of parameters */651#define SHFL_CPARMS_WRITE (5)652 653 654/*655 * SHFL_FN_LIST656 * Listing information includes variable length RTDIRENTRY[EX] structures.657 */658 659#define SHFL_LIST_NONE 0660#define SHFL_LIST_RETURN_ONE 1661 662/** SHFL_FN_LIST Parameters structure. */663struct shfl_list {664 /**665 * pointer, in: SHFLROOT (u32)666 * Root handle of the mapping which name is queried.667 */668 struct vmmdev_hgcm_function_parameter root;669 670 /**671 * value64, in:672 * SHFLHANDLE (u64) of object to be listed.673 */674 struct vmmdev_hgcm_function_parameter handle;675 676 /**677 * value32, in:678 * List flags SHFL_LIST_*.679 */680 struct vmmdev_hgcm_function_parameter flags;681 682 /**683 * value32, in/out:684 * Bytes to be used for listing information/How many bytes were used.685 */686 struct vmmdev_hgcm_function_parameter cb;687 688 /**689 * pointer, in/optional690 * Points to struct shfl_string buffer that specifies a search path.691 */692 struct vmmdev_hgcm_function_parameter path;693 694 /**695 * pointer, out:696 * Buffer to place listing information to. (struct shfl_dirinfo)697 */698 struct vmmdev_hgcm_function_parameter buffer;699 700 /**701 * value32, in/out:702 * Indicates a key where the listing must be resumed.703 * in: 0 means start from begin of object.704 * out: 0 means listing completed.705 */706 struct vmmdev_hgcm_function_parameter resume_point;707 708 /**709 * pointer, out:710 * Number of files returned711 */712 struct vmmdev_hgcm_function_parameter file_count;713};714 715/* Number of parameters */716#define SHFL_CPARMS_LIST (8)717 718 719/** SHFL_FN_READLINK Parameters structure. */720struct shfl_readLink {721 /**722 * pointer, in: SHFLROOT (u32)723 * Root handle of the mapping which name is queried.724 */725 struct vmmdev_hgcm_function_parameter root;726 727 /**728 * pointer, in:729 * Points to struct shfl_string buffer.730 */731 struct vmmdev_hgcm_function_parameter path;732 733 /**734 * pointer, out:735 * Buffer to place data to.736 */737 struct vmmdev_hgcm_function_parameter buffer;738 739};740 741/* Number of parameters */742#define SHFL_CPARMS_READLINK (3)743 744 745/* SHFL_FN_INFORMATION */746 747/* Mask of Set/Get bit. */748#define SHFL_INFO_MODE_MASK (0x1)749/* Get information */750#define SHFL_INFO_GET (0x0)751/* Set information */752#define SHFL_INFO_SET (0x1)753 754/* Get name of the object. */755#define SHFL_INFO_NAME (0x2)756/* Set size of object (extend/trucate); only applies to file objects */757#define SHFL_INFO_SIZE (0x4)758/* Get/Set file object info. */759#define SHFL_INFO_FILE (0x8)760/* Get volume information. */761#define SHFL_INFO_VOLUME (0x10)762 763/** SHFL_FN_INFORMATION Parameters structure. */764struct shfl_information {765 /**766 * pointer, in: SHFLROOT (u32)767 * Root handle of the mapping which name is queried.768 */769 struct vmmdev_hgcm_function_parameter root;770 771 /**772 * value64, in:773 * SHFLHANDLE (u64) of object to be listed.774 */775 struct vmmdev_hgcm_function_parameter handle;776 777 /**778 * value32, in:779 * SHFL_INFO_*780 */781 struct vmmdev_hgcm_function_parameter flags;782 783 /**784 * value32, in/out:785 * Bytes to be used for information/How many bytes were used.786 */787 struct vmmdev_hgcm_function_parameter cb;788 789 /**790 * pointer, in/out:791 * Information to be set/get (shfl_fsobjinfo or shfl_string). Do not792 * forget to set the shfl_fsobjinfo::attr::additional for a get793 * operation as well.794 */795 struct vmmdev_hgcm_function_parameter info;796 797};798 799/* Number of parameters */800#define SHFL_CPARMS_INFORMATION (5)801 802 803/* SHFL_FN_REMOVE */804 805#define SHFL_REMOVE_FILE (0x1)806#define SHFL_REMOVE_DIR (0x2)807#define SHFL_REMOVE_SYMLINK (0x4)808 809/** SHFL_FN_REMOVE Parameters structure. */810struct shfl_remove {811 /**812 * pointer, in: SHFLROOT (u32)813 * Root handle of the mapping which name is queried.814 */815 struct vmmdev_hgcm_function_parameter root;816 817 /**818 * pointer, in:819 * Points to struct shfl_string buffer.820 */821 struct vmmdev_hgcm_function_parameter path;822 823 /**824 * value32, in:825 * remove flags (file/directory)826 */827 struct vmmdev_hgcm_function_parameter flags;828 829};830 831#define SHFL_CPARMS_REMOVE (3)832 833 834/* SHFL_FN_RENAME */835 836#define SHFL_RENAME_FILE (0x1)837#define SHFL_RENAME_DIR (0x2)838#define SHFL_RENAME_REPLACE_IF_EXISTS (0x4)839 840/** SHFL_FN_RENAME Parameters structure. */841struct shfl_rename {842 /**843 * pointer, in: SHFLROOT (u32)844 * Root handle of the mapping which name is queried.845 */846 struct vmmdev_hgcm_function_parameter root;847 848 /**849 * pointer, in:850 * Points to struct shfl_string src.851 */852 struct vmmdev_hgcm_function_parameter src;853 854 /**855 * pointer, in:856 * Points to struct shfl_string dest.857 */858 struct vmmdev_hgcm_function_parameter dest;859 860 /**861 * value32, in:862 * rename flags (file/directory)863 */864 struct vmmdev_hgcm_function_parameter flags;865 866};867 868#define SHFL_CPARMS_RENAME (4)869 870 871/** SHFL_FN_SYMLINK Parameters structure. */872struct shfl_symlink {873 /**874 * pointer, in: SHFLROOT (u32)875 * Root handle of the mapping which name is queried.876 */877 struct vmmdev_hgcm_function_parameter root;878 879 /**880 * pointer, in:881 * Points to struct shfl_string of path for the new symlink.882 */883 struct vmmdev_hgcm_function_parameter new_path;884 885 /**886 * pointer, in:887 * Points to struct shfl_string of destination for symlink.888 */889 struct vmmdev_hgcm_function_parameter old_path;890 891 /**892 * pointer, out:893 * Information about created symlink.894 */895 struct vmmdev_hgcm_function_parameter info;896 897};898 899#define SHFL_CPARMS_SYMLINK (4)900 901#endif902