brintos

brintos / linux-shallow public Read only

0
0
Text · 22.0 KiB · 069a019 Raw
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